我最近刚开始在这里学习SAS,并且很好地掌握了基础知识,但是对于某些与我目前的知识领域之外的东西有疑问。有没有人碰巧知道循环浏览SAS数据集中所有变量的方法?我知道如何在范围(x1-x99)中的变量上运行do循环/数组,但理想情况下想要查看每个变量而不必重命名任何变量。基本上,我希望在当前值='True'/'False'时运行数据集并更改变量值。我的猜测是我需要在某处使用proc内容,但不确定如何正确使用它。任何提示/见解将不胜感激。谢谢!
答案 0 :(得分:4)
您可以创建一组非类似命名的变量。虽然您也可以使用包含基本相同信息的PROC CONTENTS
或dictionary.columns
,但您可以使用sashelp.vcolumn
走在正确的轨道上。
proc sql;
select name into :collist separated by ' '
from dictionary.columns
where memname='DATASETNAME' and libname='LIBNAME' and <other criteria>;
quit;
变量必须是所有相同的类型(字符/数字),因此您可能希望在查询中包含变量类型的标准,以及您可能需要的任何其他限制因素。
这将在您可以在数组中使用的宏变量中创建一个列表&amp; collist。
array vars &collist.;
现在你可以遍历数组了。
如果所有变量都是同一类型,并且您知道订单已修复,您也可以作弊。双短划线列表(x1 - x99)是'变量顺序,所有变量从x1到x99'并且不需要数字后缀或类似的东西。
最后,您也可以在PROC FORMAT
中编写一种格式来完成您的需要,具体取决于您打算做什么(将TRUE映射为1,将FALSE映射为0或类似的东西)。 / p>
答案 1 :(得分:1)
添加到Joe的答案:您可以克服所有变量应该属于同一类型的要求。为此,您可以使用宏循环而不是数组。首先,您需要定义宏:
%macro loop;
%do i=1 %to %sysfunc(countw(&collist));
....
<here goes your code for changing values, where instead of a variable name
you use macro function %scan(&collist,&i)>
....
%end;
%mend loop;
现在您可以将%loop
粘贴到您要处理所有变量的DATA步骤中。