楼主: 雪荆
1277 4

[原创博文] 转变生成新的变量 [推广有奖]

  • 2关注
  • 0粉丝

本科生

54%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0.0004
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
831 点
帖子
60
精华
0
在线时间
103 小时
注册时间
2011-7-27
最后登录
2020-2-20

楼主
雪荆 发表于 2012-3-3 18:54:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data a;
input id  x;
cards;
1  6
1  0  
1  1
1  2
1  4
1  2
1  3
1  2
1  .
2  3
2  0  
2  1
......
;
run;
proc sort data=a;
by p_id;
run;
proc transpose data=a out=b prefix=fol;
var x;
by id;
run;
data c(keep=id fol2 fol4 fol6);
set b;
run;
由以上程序产生的变量fol2 fol4 fol6如何转变成var1 var2 var3?谢谢各位大侠指教(......表示数据量很大)。
二维码

扫码加我 拉你入群

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

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

关键词:Transpose Trans cards Input Data 程序 如何

沙发
webgu 发表于 2012-3-3 20:04:19
没太明白,是要重命名成VAR1,VAR2,VAR3……?
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

藤椅
freerunning_sky 在职认证  发表于 2012-3-4 02:04:23
  1. data a;
  2. input id  x;
  3. cards;
  4. 1  6
  5. 1  0  
  6. 1  1
  7. 1  2
  8. 1  4
  9. 1  2
  10. 1  3
  11. 1  2
  12. 1  .
  13. 2  3
  14. 2  0  
  15. 2  1
  16. ;
  17. run;
  18. proc sort data=a;
  19. by id;
  20. run;
  21. proc transpose data=a out=b prefix=fol;
  22. var x;
  23. by id;
  24. run;

  25. %let dsid=%sysfunc(open(b));
  26. %let nvars=%eval((%sysfunc(attrn(&dsid,NVARS))/2)-1);
  27. %let rc=%sysfunc(close(&dsid));

  28. data c;
  29. set b;
  30. array fol(*) fol:;
  31. array tmp(*) var1-var&nvars.;
  32. do i=1 to dim(tmp);
  33.         tmp(i)=fol(i*2);
  34. end;
  35. keep id var:;
  36. run;
复制代码

板凳
ntsean 发表于 2012-3-4 02:57:41
为什么不在原数据先对每个ID,挑出2,4,6个观测量,这个用data step很容易做
然后用proc transpose,让 prefix=var
就可以了

报纸
雪荆 发表于 2012-3-4 16:30:13
嗯,O(∩_∩)O谢谢。主要数据量比较大,每个观测对象的结构是不一样的,已经解决了。谢谢呀!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 10:54