楼主: madkoala
2644 5

关于数据集“转置”的问题 [推广有奖]

  • 0关注
  • 1粉丝

大专生

98%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
3 点
热心指数
0 点
信用等级
0 点
经验
902 点
帖子
57
精华
0
在线时间
72 小时
注册时间
2009-4-7
最后登录
2018-12-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在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;
但是在下愚昧,实在没理解以上哪一步实现了自动识别出源数据选择的是哪个,然后赋的值,望大虾们指点一二!







二维码

扫码加我 拉你入群

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

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

关键词:数据集 Decision Choice output RETAIN 数据 choice 文章

沙发
guanglovefeng 发表于 2012-5-28 16:52:24 |只看作者 |坛友微信交流群
谢谢

使用道具

藤椅
tj0412ymy 发表于 2012-5-28 17:17:32 |只看作者 |坛友微信交流群
decision = ( choice = i );  choice是对原数据选择的定位:if choice=i then decision=1;else decision=0;
已有 1 人评分学术水平 收起 理由
hcydlee + 1 热心帮助其他会员

总评分: 学术水平 + 1   查看全部评分

对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

使用道具

板凳
yongjiang2 发表于 2012-5-28 17:34:05 |只看作者 |坛友微信交流群
就像二楼说的那样,,楼主你可以把do循环的每一步写出来,就会明白怎么自动选择了。

使用道具

报纸
madkoala 发表于 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;
非常清晰,多谢解释!

使用道具

地板
hcydlee 发表于 2012-5-29 14:16:34 |只看作者 |坛友微信交流群
转置很重要
80 字节以内
不支持自定义 Discuz! 代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-22 04:20