是否有任何语句\函数能够获取变量的名称?最好将它们放入另一个数据集,文本字段或宏变量的列中.
例如
- 数据集1
Name age sex
Jk 14 F
FH 34 M
Run Code Online (Sandbox Code Playgroud)
预期的数据集
Var_name_of_dataset1
Name
age
sex
Run Code Online (Sandbox Code Playgroud)PS:我知道一个声明:select into,它确实相关它可以将列的值读入带有自定义separetors的字段中,因此希望有类似的方法将列名读入字段或列.
谢谢
Lau*_*ick 25
PROC CONTENTS是在数据集中获取该信息的最快方式.列名可以在NAME列中找到.
proc contents data=sashelp.class out=contents noprint;
run;
Run Code Online (Sandbox Code Playgroud)
Chr*_*s J 20
您还可以使用datastep和数组函数,例如
data colnames ;
set sashelp.class (obs=1) ;
array n{*} _NUMERIC_ ;
array c{*} _CHARACTER_ ;
do i = 1 to dim(n) ;
vname = vname(n{i}) ;
output ;
end ;
do i = 1 to dim(c) ;
vname = vname(c{i}) ;
output ;
end ;
run ;
小智 7
%macro getvars(dsn);
%global vlist;
proc sql;
select name into :vlist separated by ' '
from dictionary.columns
where memname=upcase("&dsn");
quit;
%mend;
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为&vlist的宏变量,该变量将包含数据集中所有变量的名称,并以空格分隔.如果你想在变量名之间使用逗号,那么你所要做的就是将'sepa by'值从''改为','.在where语句中使用upcase函数可以避免在错误的情况下有人传递数据集名称的问题.需要全局语句,因为创建的宏变量不一定在宏之外可用而不将其定义为全局