全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11269 7
2015-10-14
【问题背景】
在实际工作中,经常面临自定义数据集变量次序的问题。当处理的变量较多时,就算手工在EXCEL里通过VLOOKUP排序处理也是比较耗时的。
【解决方法】
除了引用Crackman给出的两种方法(http://crackman.net/?p=1044)外,另附两种我平时常用的解决办法,总有四种方法可参考。
方法1:
在SET语句之前,用LENGTH语句可以重新声明变量在PDV中的顺序

data crackman;
length Name $ 6 Age 8 Sex $ 2 Weight Height 8;
set sashelp.class;
run;

方法2:
利用retain语句重置变量顺序

data crackman1;
retain Name Age Sex Weight Height;
set sashelp.class;
run;

方法3:
利用SQL语句重置变量顺序

proc sql;
create table crackman1 as
select Name,Age,Sex,Weight,Height
from sashelp.class
;
quit;

方法4:
将排序完毕的变量存储在一数据集中,通过调用宏变量在retain或SQL语句中重置变量顺序

data varorder;
input varname $10.;
cards;
Name
Age
Sex
Weight
Height
;
run;

proc sql noprint;
select distinct varname into :nmlist1 separated by " "  from varorder
;
select distinct varname into :nmlist2 separated by ","  from varorder
;
quit;

data crackman1;
retain &nmlist1.;
set sashelp.class;
run;

proc sql;
create table crackman2 as
select &nmlist2
from sashelp.class
;
quit;

如各位朋友有其他方法,可在回帖中附上,以便大家共享。
二维码

扫码加我 拉你入群

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

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

全部回复
2015-10-14 17:11:11
多谢楼主,刚才在google里搜了一下,说是还可以用attrib, 哪种方法最好呢?
二维码

扫码加我 拉你入群

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

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

2015-10-14 17:22:47
不知道可以用proc datasets来处理么?这样不必读入所有观测。
二维码

扫码加我 拉你入群

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

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

2015-10-15 08:24:20
mandyfervor 发表于 2015-10-14 17:11
多谢楼主,刚才在google里搜了一下,说是还可以用attrib, 哪种方法最好呢?
类似Length语句,参考意义不大
二维码

扫码加我 拉你入群

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

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

2015-10-15 09:17:10
第四种方法最后生成数据集变量的次序是跟你生成宏变量所存储的变量次序相关的,跟你varorder中所定义的变量次序没有关系了~~所以第四种方法应该是无效的啊
二维码

扫码加我 拉你入群

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

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

2017-8-11 01:01:11
很赞!!谢谢楼主!!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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