加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

取SAS数据集的变量名并赋给宏变量

(2013-02-04 15:18:30)
分类: SAS/EM

取SAS数据集的变量名并赋给宏变量

对一个数据集的变量进行分析,至少需要变量名,对吧。如果变量少,自已逐个输入也没问题,所谓忍一忍就和谐了。如果变量多呢,就无法忍受了--一个个地敲进去,不但麻烦,且易出错。解决之道有三种。

其一是读取表的dictionary.columns.Dictionary表里保存着库名及其成员的名字。以sashelp里的表class为例。

procsql;

createtable vars as

   select varnum,name

   from dictionary.columns

   where memname='CLASS';

quit;

其中varnum表示是第几个变量,name表示变量名。值得提醒的是,Dictionary里是以大写字母的形式保存表名。所以这里须要写CLASS

其二是读取SASHELP.VCOLUMN。以数据步读取的形式如下

data vars1;

set sashelp.vcolumn;

where memname='CLASS';

keep varnum name;

run;

其三是利用过程proc contents。这个要来得比读取dictionary和sashelp.vcolumn灵活。

data vars1;

set sashelp.vcolumn;

where memname='CLASS';

keep varnum name;

run;

如果需要将变量名赋给一个宏变量,以空格隔开。其例如下

proccontentsdata=sashelp.class

out=vars3(keep=varnum name)

     noprint;

run;

procsqlnoprint;

selectdistinct name

     into :classname separated by' '

     from vars3

     orderby varnum;

quit;

可以用%put &classname;察看其宏变量。得到结果

Name Sex Age Height Weight

当然有时并不想所有的变量都赋给这个宏变量。比如只想取出第1个和第2个变量给宏变量。当然也好解决。

procsqlnoprint;

selectdistinct name

     into :classname separated by' '

     from vars3

     where varnum in (1,2)

     orderby varnum;

quit;

注意加了行where varnum in (1,2).或者

proccontentsdata=sashelp.class(keep=Name Sex)

out=vars4(keep=varnum name)

     noprint;

run;

procsqlnoprint;

selectdistinct name

     into :classname separated by' '

     from vars4    

     orderby varnum;

quit;

%put &classname;

也是一样的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有