我知道,如果我们要引用一系列具有相似名称的变量,例如VAR1,VAR2,VAR3 ... VAR150,则可以只使用“ VAR1-VAR50”。但是,如果变量的命名约定是两个“范围”怎么办?
一个例子:假设我有一堆变量VARxxyy,其中的“ xx”部分取值范围为01到50,而“ yy”的取值范围为01到75。是否有类似的方式引用所有变量这些立即使用类似的语法?我可以说:
VAR0101-VAR0175 VAR0201-VAR0275 ... VAR5001-var5075
但是我觉得那是很多代码。
还:有没有一种方法可以一次将数据集中的所有变量组成数组?
答案 0 :(得分:2)
下面是一些可用于数组的变体
/* to mention all character or numeric variables*/
data _null_;
set sashelp.class;
array one(*) _character_;
array two(*) _numeric_;
run;
/* variables which are in order*/
data _null_;
set sashelp.cars;
array three(*) enginesize--length;
run;
/* all the variables must belong to same type then you can use the below code*/
data _null_;
set old;
array four(*) _all_;
run;
答案 1 :(得分:2)
拥有变量列表的三种主要方法。
一个是冒号,它指定所有以相同前缀开头的内容。
board = MarblesBoard((3,6,7,4,1,0,8,2,5))
board
3 6 7 4 1 0 8 2 5
如果您可以控制变量,并且知道以后需要删除它们,那么我通常会在开始时以_命名它们,以轻松删除所有变量。
第二个是使用-表示法,它取决于变量的顺序。因此,只要变量并排,则介于两者之间的所有内容都将包括在内。
`https://jsfiddle.net/0ll0lll/x7uhbr6d/`
如果需要,还可以修改它以仅包括数字或字符数据。
DROP VAR:;
这里概述了这些以及更多内容: https://blogs.sas.com/content/iml/2018/05/29/6-easy-ways-to-specify-a-list-of-variables-in-sas.html
答案 2 :(得分:0)
以下解决方案不适用于您的情况,因为您有超过3000个与模式var(01-50)(01-75)匹配的变量。仍保留以供参考。
您可以从sasHelp.vColumn视图中获取所有变量名称。请记住,宏变量的最大长度为65534,因此,如果您最多可以拥有789个长度为7的变量或704个长度为8的变量。
proc SQL noprint;
select name into :varList separated by ' '
from sasHelp.vColumn
where libName = 'WORK' and memName = 'YOUR_DS_NAME' and prxMatch('/^VAR(0[1-9]|[1-4]\d|50)(0[1-9]|[1-7]\d|7[0-5]$)/', strip(upcase(name)))
;
quit;
%put Variables: &varList;