具有多个索引的可变范围

时间:2018-10-22 22:53:33

标签: sas

我知道,如果我们要引用一系列具有相似名称的变量,例如VAR1,VAR2,VAR3 ... VAR150,则可以只使用“ VAR1-VAR50”。但是,如果变量的命名约定是两个“范围”怎么办?

一个例子:假设我有一堆变量VARxxyy,其中的“ xx”部分取值范围为01到50,而“ yy”的取值范围为01到75。是否有类似的方式引用所有变量这些立即使用类似的语法?我可以说:

VAR0101-VAR0175 VAR0201-VAR0275 ... VAR5001-var5075

但是我觉得那是很多代码。

还:有没有一种方法可以一次将数据集中的所有变量组成数组?

3 个答案:

答案 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的变量或7​​04个长度为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;