请选择 进入手机版 | 继续访问电脑版
楼主: hongyuejia
1435 2

[问答] SAS中将几个变量合成一个变量 [推广有奖]

  • 6关注
  • 3粉丝

博士生

45%

还不是VIP/贵宾

-

威望
0
论坛币
195 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
6202 点
帖子
138
精华
0
在线时间
158 小时
注册时间
2015-3-24
最后登录
2022-7-21

hongyuejia 发表于 2017-4-13 13:30:33 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一个数据集x,里面有变量a,b,c,现在我需要将a,b,c合成一个新变量d,还有一个变量e,如果变量来自于a,那么e='a'
如果变量来自于b,那么e='b'
如果变量来自于c,那么e='c'
观测为原来的三倍(打个比方实际变量还要多)我能想到的是用宏程序如下:

  1. data x;
  2. input a $6. b $6. c $7.;
  3. cards;
  4. apple  one   dog
  5. orange two   cat
  6. apple  two   rabbit
  7. peach  three dog
  8. orange one   dog
  9. ;
  10. run;
  11. %macro set(put,var,out);
  12. data x1;
  13. set x;
  14. keep &put;
  15. run;
  16. data &out;
  17. set x1;
  18. rename &put=d;
  19. e="&var";
  20. %mend set;
  21. %set(a,a,a);
  22. %set(b,b,b);
  23. %set(c,c,c);
  24. data final;
  25. set a b c;
  26. run;
复制代码
就是变量一多我觉得不够精简,也想过用proc transpose 来做,但是我的观测值一多这个方法也不是很理想,想问问大神有没有更精简的方法




二维码

扫码加我 拉你入群

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

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

关键词:Transpose Orange Rabbit rename Apple

lovexialulu 发表于 2017-4-13 16:16:13 |显示全部楼层 |坛友微信交流群
  1. data fina;
  2. length d $40.;
  3. %macro jj(var);
  4. set x(in=&var keep=&var rename=(&var=d));
  5. if &var then e="&var";output;
  6. %mend jj;
  7. %jj(a);
  8. %jj(b);
  9. %jj(c);
  10. proc sort;by e d;
  11. run;
复制代码

使用道具

hongyuejia 发表于 2017-5-8 10:45:36 |显示全部楼层 |坛友微信交流群
后来发现了一种更简单的方法,直接在后面加Output就可以达到我想要的效果

使用道具

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

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

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

GMT+8, 2024-3-29 08:34