Диапазоны переменных с несколькими индексами - PullRequest
0 голосов
/ 23 октября 2018

Я знаю, что если мы хотим обратиться к диапазону переменных с похожими именами, таким как, например, VAR1, VAR2, VAR3 ... VAR150, мы можем просто использовать "VAR1-VAR50".Что если, однако, соглашения о присвоении имен для переменных таковы, что существует два «диапазона»?

Пример: предположим, у меня есть набор переменных VARxxyy, где часть 'xx' принимает значения от 01 до 50, а 'yy' принимает значения от 01 до 75. Существует ли аналогичный способссылаться на все сразу, используя похожий синтаксис?Я мог бы просто сказать:

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

, но я чувствую, что это много кода.

Также: есть ли способ создать массив всех переменных в вашем наборе данных водин раз?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Существует три основных способа иметь списки переменных.

Одним из них является двоеточие, которое определяет все, которые начинаются с того же префикса.

DROP VAR:;

Если у вас есть контроль над вашими переменными, и вы знаете, что вам нужно отбросить их позже, я частоназовите их с _ в начале, чтобы легко бросить их всех.

Во-вторых, используется нотация -, которая зависит от переменного порядка.Так что, пока переменные находятся рядом, все, что между ними, включено.

Var0000--Var5075;

Вы также можете изменить это, чтобы включить только числовые или символьные данные, если это необходимо.

StartVAR-numeric-EndVar;

Эти и другие описаны здесь: https://blogs.sas.com/content/iml/2018/05/29/6-easy-ways-to-specify-a-list-of-variables-in-sas.html

0 голосов
/ 23 октября 2018

Решение ниже не будет работать в вашем случае, потому что у вас есть более 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;
0 голосов
/ 23 октября 2018

Ниже приведены некоторые варианты, которые вы можете использовать для массивов

  /* 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;
...