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

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

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

proc sql;

create table 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;

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

proc contents data=sashelp.class

out=vars3(keep=varnum name)

     noprint;

run;

proc sql noprint;

select distinct name

     into :classname separated by ' '

     from vars3

     order by varnum;

quit;

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

Name Sex Age Height Weight

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

proc sql noprint;

select distinct name

     into :classname separated by ' '

     from vars3

     where varnum in (1,2)

     order by varnum;

quit;

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

proc contents data=sashelp.class(keep=Name Sex)

out=vars4(keep=varnum name)

     noprint;

run;

proc sql noprint;

select distinct name

     into :classname separated by ' '

     from vars4    

     order by varnum;

quit;

%put &classname;

也是一样的。

posted on 2009-02-20 23:54  zgw21cn  阅读(3959)  评论(0编辑  收藏  举报

导航