全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3013 5
2012-05-28
在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;
但是在下愚昧,实在没理解以上哪一步实现了自动识别出源数据选择的是哪个,然后赋的值,望大虾们指点一二!







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-5-28 16:52:24
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-28 17:17:32
decision = ( choice = i );  choice是对原数据选择的定位:if choice=i then decision=1;else decision=0;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-28 17:34:05
就像二楼说的那样,,楼主你可以把do循环的每一步写出来,就会明白怎么自动选择了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-28 18:05:54
tj0412ymy 发表于 2012-5-28 17:17
decision = ( choice = i );  choice是对原数据选择的定位:if choice=i then decision=1;else decision=0;
非常清晰,多谢解释!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-29 14:16:34
转置很重要
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群