楼主: chenchengzhi22
2782 5

同一数据集,不同列拼接 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

87%

还不是VIP/贵宾

-

威望
0
论坛币
55 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1889 点
帖子
126
精华
0
在线时间
225 小时
注册时间
2010-5-14
最后登录
2023-9-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

data test;
input v1 v2 v3 v4;
datalines;
1 2 3 4
5 6 7 8
9 10 11 12
;run;
求问怎么样能创造一个变量v是把v1到v4这四个变量纵向拼接起来的?
并且可否再创造一个变量name比如这个数值以前是v1中的name就是v1如果是v2的name就是v2?

十分感谢!


二维码

扫码加我 拉你入群

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

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

关键词:数据集 Input Lines name Data 拼接

沙发
wsddzr 发表于 2015-7-11 11:54:16 |只看作者 |坛友微信交流群
这样可以吗 也是初学者,写的比较麻烦
  1. data test;
  2. input v1 v2 v3 v4;
  3. datalines;
  4. 1 2 3 4
  5. 5 6 7 8
  6. 9 10 11 12
  7. ;run;

  8. proc sql;
  9. create table want as select v1,'v1' as name from test
  10. union select v2,'v2' as name from test
  11. union select v3,'v3' as name from test
  12. union select v4,'v4' as name from test
  13. order by name ;
  14. quit;

  15. proc print data=want;
  16. run;
复制代码

使用道具

藤椅
chenchengzhi22 发表于 2015-7-11 12:32:21 |只看作者 |坛友微信交流群
wsddzr 发表于 2015-7-11 11:54
这样可以吗 也是初学者,写的比较麻烦
很感谢您的回复,这个如果四个变量是可以的,但是如果变量很多应该怎么能把
proc sql;
create table want as select v1,'v1' as name from test
union select v2,'v2' as name from test
union select v3,'v3' as name from test
union select v4,'v4' as name from test
order by name ;
quit;
这段优化一下不? 可以批量选取或者命名么?比如有v1-v300个变量的话。谢了

使用道具

板凳
wsddzr 发表于 2015-7-11 13:02:05 |只看作者 |坛友微信交流群
chenchengzhi22 发表于 2015-7-11 12:32
很感谢您的回复,这个如果四个变量是可以的,但是如果变量很多应该怎么能把
proc sql;
create table wa ...
上面那个其实不大好,你看看这个链接里的呢
http://stackoverflow.com/questions/23082948/transposing-wide-to-long-in-sas-without-extra-columns
另外应该可以用proc transpose做的,等大神来回答吧~

  1. data test;
  2. input v1 v2 v3 v4 v5 v6 v7 v8 v9 v10;
  3. datalines;
  4. 1 2 3 4 5 6 7 8 9 10
  5. 5 6 7 8 5 6 7 8 9 10
  6. 9 10 11 12 1 2 3 4 5 .
  7. 1 2 3 4 . 2 3 4 5 6
  8. ;run;

  9. data want;
  10. set test;
  11. array vars v1-v10;
  12. do _i = 1 to dim(vars);
  13.   varname = vname(vars[_i]);
  14.   value   = vars[_i];
  15.   output;
  16. end;
  17. keep a varname value;
  18. run;

  19. proc sort data=want;
  20. by varname;
  21. run;
  22. proc print data=want;

  23. run;
复制代码

使用道具

报纸
苹果叶 在职认证  发表于 2015-7-11 19:56:54 |只看作者 |坛友微信交流群
  1. data test;
  2. input v1 v2 v3 v4;
  3. datalines;
  4. 1 2 3 4
  5. 5 6 7 8
  6. 9 10 11 12
  7. ;run;

  8. proc transpose data=test out=trans;
  9.   var v:;
  10. run;

  11. data trans;
  12.   set trans;
  13.   array trans col:;
  14.   do over trans;
  15.     newcol=trans;
  16.         output;
  17.   end;
  18.   drop col:;
  19. run;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
Tigflanker + 2 + 2 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 2   查看全部评分

使用道具

地板
wsddzr 发表于 2015-7-15 14:41:28 |只看作者 |坛友微信交流群

  1. proc transpose data=test name=varname out=test1 (drop= v1 v2 v3 v4 rename=(col1=value));
  2. var v1 v2 v3 v4;
  3. by v1 v2 v3 v4;
  4. run;

  5. proc sort data=test1;
  6. by varname;
  7. run;

  8. proc print data=test1;
  9. run;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
Tigflanker + 2 + 2 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 2   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-20 12:20