Sas 需要阵列的帮助吗
我需要创建一些新变量Sas 需要阵列的帮助吗,sas,Sas,我需要创建一些新变量day1day2day3等。如果readmit=1则执行day[I]每个day[I]=gap,例如,前两次重新提交应该得到day[1]=21day[2]=9。然后下一次readmit=1,对于第三次、第四次和第五次readmit=1应该得到结果day[1]=29day[2]=12day[3]=23,依此类推。希望我表达得足够好。提前谢谢 STUDYID index readmit gap 10001 1 0
day1
day2
day3
等。如果readmit=1
则执行day[I]
每个day[I]=gap
,例如,前两次重新提交应该得到day[1]=21
day[2]=9
。然后下一次readmit=1
,对于第三次、第四次和第五次readmit=1
应该得到结果day[1]=29
day[2]=12day[3]=23,依此类推。希望我表达得足够好。提前谢谢
STUDYID index readmit gap
10001 1 0
10001 1 0 79
10001 1 0 48
10001 1 0 39
10001 1 0 74
10001 1 0 41
10001 0 1 21
10001 0 1 9
10001 0 0 130
10001 0 0 52
10001 0 0 110
10001 1 0 80
10001 0 1 29
10001 0 1 12
10001 0 1 23
10001 1 0 57
10001 0 1 28
10001 0 1 14
10001 1 0 118
10001 0 1 5
10001 0 1 22
10001 1 0 40
10001 0 1 23
10001 0 1 24
10001 0 1 19
我想下面的代码回答了你的问题。这需要进行两次数据传递,第一次用于计算READMIT=1的最大连续行数,该数据存储在宏变量中,用于确定第二次传递中的数组大小 解决这个问题的关键是数据的顺序以及在BY语句中使用NOTSORTED选项。这使得READMIT值中的每一个更改都可以被视为一个新的节 希望这能有所帮助,但若有人能找到一种只使用一次数据传递的方法,那个将是一件好事
data have;
input STUDYID index readmit gap;
cards;
10001 1 0 .
10001 1 0 79
10001 1 0 48
10001 1 0 39
10001 1 0 74
10001 1 0 41
10001 0 1 21
10001 0 1 9
10001 0 0 130
10001 0 0 52
10001 0 0 110
10001 1 0 80
10001 0 1 29
10001 0 1 12
10001 0 1 23
10001 1 0 57
10001 0 1 28
10001 0 1 14
10001 1 0 118
10001 0 1 5
10001 0 1 22
10001 1 0 40
10001 0 1 23
10001 0 1 24
10001 0 1 19
;
run;
data _null_;
set have (keep=readmit) end=last;
by readmit notsorted;
if first.readmit then days=0;
retain max_days;
if readmit=1 then days+1;
max_days=max(max_days,days);
if last then call symput('max_days',strip(max_days));
run;
%put maximum consecutive days = &max_days.;
data want;
set have;
by readmit notsorted;
array dayvar{*} day1-day&max_days.;
if first.readmit then do;
num_day=0;
call missing(of day:);
end;
retain day1-day&max_days.;
if readmit=1 then do;
num_day+1;
dayvar{num_day}=gap;
if last.readmit then output;
end;
keep studyid index day: ;
run;
请使用编辑器中的
code
块,将数据排列在表格中。此外,请去掉示例中不需要的任何列。您的问题不是很清楚。你能试着更清楚地描述一下你想要什么吗?还有@RWill的建议,有助于使示例更加清晰。最后,让人们有动力回答你的问题的一个好方法是回到前面的问题,并将最好的问题标记为“已接受”。谢谢Robbie帮我修改。我留下这些专栏,以防需要它来帮助我弄清楚。无论如何,下次我会把它移除。谢谢你的提问,基思。这就是我想要的。超级的!谢谢你找出我不清楚的表情,谢谢你抽出时间。