在Proc MDC的介绍文章中提到
数据集中每个pid有三个选择,1,2和3,ttime123分别是每个选择所需消耗的时间。
data origdata;
input ttime1 ttime2 ttime3 choice @@;
datalines;
16.481 16.196 23.89 2 15.123 11.373 14.182 2
19.469 8.822 20.819 2 18.847 15.649 21.28 2
;
需要转换成如下的数据集(类似转置,每个id三个变量变成了每个id三个观测),如果之前某观测选择了2,则转换后的数据集中的这个id对应的三个观测中的选择为2(即pid)的那个decision中为1(比如下表中第二排),其他两个选择为0.
pid mode ttime decision
1 1 16.481 0
1 2 16.196 1
1 3 23.890 0
2 1 15.123 0
2 2 11.373 1
2 3 14.182 0
3 1 19.469 0
3 2 8.822 1
3 3 20.819 0
文章中用到了以下步骤来实现以上的数据集转变
data newdata(keep=pid decision mode ttime);
set origdata;
array tvec{3} ttime1 - ttime3;
retain pid 0;
pid + 1;
do i = 1 to 3;
mode = i;
ttime = tvec{i};
decision = ( choice = i );
output;
end;
run;
但是在下愚昧,实在没理解以上哪一步实现了自动识别出源数据选择的是哪个,然后赋的值,望大虾们指点一二!