我最近在这里开始学习SAS,并且基本能够很好地完成,但是在我目前的知识领域之外有一些问题。有人碰巧知道在SAS数据集中循环所有变量的方法吗?我知道如何在范围(x1-x99)中的变量上运行do循环/数组,但理想情况下希望查看每个变量而不必重命名任何变量。基本上,我正在寻找运行数据集并在当前值='True'/'False'时更改变量值。我的猜测是,我需要在这里使用proc内容,但并不确定如何正确使用它。任何提示/见解将不胜感激。谢谢!骑自行车穿过所有变量
1
A
回答
4
您可以创建一个非相似命名变量的数组。尽管您也可以使用dictionary.columns
或sashelp.vcolumn
,它们基本上包含相同的信息,但它们的编号为PROC CONTENTS
。
proc sql;
select name into :collist separated by ' '
from dictionary.columns
where memname='DATASETNAME' and libname='LIBNAME' and <other criteria>;
quit;
的变量必须具有相同的类型(字符/数字),所以你可能要包括的变量类型的查询的标准,再加上你可能需要的任何其他限制因素。
这将创建一个列表,& collist,在宏变量您可以在阵列
array vars &collist.;
在使用,现在你可以循环阵列上。
如果所有变量都是相同类型,并且您知道订单是固定的,那么您也可以作弊。双破折号列表(x1 - x99)是'可变顺序,所有变量从x1到x99',并且不需要数字后缀或类似的东西。
最后,你也可以写一个PROC FORMAT
的格式来完成你所需要的操作,具体取决于你打算做什么(映射TRUE为1,FALSE为0或类似的东西)。
1
添加到乔的答案:你可以克服所有变量应该是相同类型的要求。为此,您可以使用宏循环而不是数组。首先,你需要定义宏:
%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
数据步你要去的地方处理所有变量。
+1
尽管技术上可行,但我认为这是糟糕的编程。不仅非常罕见,您将拥有相同的代码来执行数字和字符变量,但是如果您确实可以创建两个比这更清晰的数组。 – Joe
相关问题
- 1. 骑自行车穿过列R
- 2. 骑自行车穿过Javascript Array
- 3. 骑自行车穿过一系列带有sass的颜色
- 4. 骑自行车穿过使用javascript的页面
- 5. 骑自行车穿过图像和文字
- 6. 骑自行车穿过一条绳子,并用文字分开?
- 7. 按下按钮后骑自行车穿过整个阵列
- 8. 通过ToolStripSplitButton中的DropDownItems骑自行车
- 9. 骑自行车通过枚举在MySQL
- 10. 骑自行车通过JSON对象
- 11. Jquery骑自行车穿越阵列 - 必须有更好的方式
- 12. 使用线程骑自行车图像
- 13. 使用javascript骑自行车图像
- 14. 无法停止骑自行车动画
- 15. 使用matplotlib骑自行车的情节
- 16. 骑自行车在斯威夫特
- 17. 褪色幻灯片不骑自行车?
- 18. 识别用户正在开车,步行,骑自行车
- 19. 骑自行车通过URL下载CSV文件
- 20. 卡住骑自行车通过多种颜色。
- 21. 骑自行车通过JSON从数据库使用jQuery
- 22. 骑自行车通过的背景颜色与JavaScript
- 23. 骑自行车通过关联数组的数组
- 24. 骑自行车穿过一个文件夹,并在每个文件上使用matlab操作
- 25. GraphHopper车辆=汽车的作品,但步行或骑自行车不工作
- 26. 骑自行车通过TabControl标签虽然没有专注于它
- 27. 基于视觉的自行车骑行者检测android app
- 28. 在我的excel页面骑自行车通过一些复选框
- 29. CSS3关键帧通过多个图像骑自行车的动画
- 30. 骑自行车通过文本文件,并获取一个字符串值
谢谢你们,我很抱歉迟到的回应。星期一我得玩这个。无论什么原因,当我运行Proc SQL时,它都会在日志中说没有行被选中。最后我需要额外的标准才能运作吗?我想要选择collist中的所有变量,而不仅仅是感兴趣的变量。实际上,您使用非常相似的代码帮助我解决了之前的问题,但最终还是包含了其他条件。该代码在这个相同的数据集上工作正常,但是当我排除该条件时,它说没有行被选中。 – photec
如果没有行被选中,那么您需要*更少*或*不同*条件。更多只会进一步限制(可能需要,也可能不需要,这取决于你的情况)。 DATASETNAME和LIBNAME当然是您实际值的占位符。 – Joe