如何读取SAS数据集中的变量名称?

mj0*_*119 13 variables sas

是否有任何语句\函数能够获取变量的名称?最好将它们放入另一个数据集,文本字段或宏变量的列中.

例如

- 数据集1

Name age sex

    Jk   14   F
    FH   34   M
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 ;

  • +1:我认为这可能是最有用和最灵活的方法.您可以从数据步骤输出所需内容 - 特定格式的数据集,或CALL SYMPUT以设置给定样式的宏变量.你也可以做VLABEL,VFORMAT等来获取其他信息. (4认同)

小智 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函数可以避免在错误的情况下有人传递数据集名称的问题.需要全局语句,因为创建的宏变量不一定在宏之外可用而不将其定义为全局