这是另一种需要较少编码的方法。它不需要运行 proc 内容,不需要知道变量的数量,也不需要创建宏函数。它也可以扩展来做一些额外的事情。
第 1 步是使用内置的字典视图来获取所需的变量名称。合适的视图是 dictionary.columns,它的别名是 sashelp.vcolumn。字典 libref 只能在 proc sql 中使用,而 sashelp 别名可以在任何地方使用。我倾向于使用 sashelp 别名,因为我使用 DMS 在 Windows 中工作,并且始终可以交互地查看 sashelp 库。
proc sql;
select compress(Name||"_Ref") into :name_list
separated by ' '
from sashelp.vcolumn
where libname = 'WORK'
and memname = 'NAMES';
quit;
这将生成一个带有所需名称的空格分隔宏。
第 2 步要构建空数据集,则此代码将起作用:
Data New ;
length &name_list ;
run ;
您可以使用稍微复杂一点的 select 语句来避免假设长度或创建具有新变量名称的填充数据集。
例如
select compress(Name)||"_Ref $")||compress(put(length,best.))
into :name_list
separated by ' '
将生成一个宏变量,该变量保留每个变量的先前长度。这将在不更改上述步骤 2 的情况下工作。
To create populated data set for use with rename dataset option, replace the select statement as follows:
select compress(Name)||"= "||compress(_Ref")
into :name_list
separated by ' '
Then replace the Step 2 code with the following:
Data New ;
set names (rename = ( &name_list)) ;
run ;