全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
14603 11
2011-09-20
请问各位高手,请问如何获取数据集里面的所有列名?谢谢!

1. 我有1个宏会产生1个数据集test如下,这个数据集的列名,列数,列性质,行数不是固定的,例如第一个列名当前是"UP_DOWN",但宏下次运行,该列名可能变为“ABC”。


2. 我想根据上面数据集的行数n得到n个宏变量,以便其它程序调用。这n个宏变量是所有上面变量的组合,例如,对上面的表,应该产生如下2个宏变量L1, L2:
L1 =        “UP_DOWN=D ss=63409 mean=0.125xxxx std=0.014xxx”
L2 =        “UP_DOWN=U ss=45499 mean=0.1235xxxx std=0.013xxx”

我想用类似下面的程序实现,但不知道怎么调用列名和列内容,因为列名是不固定的。
复制代码

谢谢了!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-9-20 14:33:59
复制代码
不太在意变量顺序的话,这个或许行,希望对你有帮助
二维码

扫码加我 拉你入群

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

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

2011-9-20 15:23:57
soporaeternus,非常感谢!
我将_n和_c颠倒后,得到我希望的结果,谢谢!

我注意到我最上面那个数据集的小数位格式太多了,所以打算如果绝对值小于1就保留3位小数点,否则保留1位,我按照你程序的思想去format,但是下面两个程序都不成功,请问应该怎么做呢?谢谢!
复制代码
复制代码
二维码

扫码加我 拉你入群

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

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

2011-9-20 15:49:01
/*输入参数为逻辑库名(lib)和数据集名(dataset)*/
%macro youfmt(lib,dataset);
proc sql;
        /*求数据集的变量数存入宏变量n*/
        select count(*) into :n
        from dictionary.columns
        where upcase(libname)=%upcase("&lib") and upcase(memname)=%upcase("&dataset");

        /*将n个变量名分别存入宏变量col1到coln中*/
        select name into :col1-:col%cmpres(&n)
        from dictionary.columns
        where upcase(libname)=%upcase("&lib") and upcase(memname)=%upcase("&dataset");
quit;       

/*按照所需格式将每个观测值存入宏变量L1-Lm*/
data _null_;
        format temps $10000.;
        set perm.all;
        %do i=1 %to &n;
                temps=catx(' ',temps,"&&col&i",'=',&&col&i);
        %end;
        call symput('L'||left(_n_),temps);
run;
%put 第一个记录的输出值:&L1;
%mend youfmt;

%youfmt(work,test);
二维码

扫码加我 拉你入群

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

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

2011-9-20 15:49:50
复制代码
稍作改动......希望对你有帮助
二维码

扫码加我 拉你入群

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

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

2011-9-20 20:21:52
dyes0506 发表于 2011-9-20 15:49
/*输入参数为逻辑库名(lib)和数据集名(dataset)*/
%macro youfmt(lib,dataset);
proc sql;
请教下:set perm.all是什么??
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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