Выберите диапазон переменных с помощью PROC SQL в SAS - PullRequest
1 голос
/ 14 марта 2019

Я хочу выбрать строки на основе диапазона похожих переменных, удовлетворяющих определенным условиям:

proc sql;
  create table2 as
  select * from table1 
  where proc1 in ('111', '222', '333') or
        proc2 in ('111', '222', '333') or
        proc3 in ('111', '222', '333');
quit;

Есть ли способ, которым я могу выбрать переменные более эффективно? В SAS 'data step я могу использовать proc1-proc3, но это не может быть сделано в proc SQL.

1 Ответ

3 голосов
/ 14 марта 2019

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

Сначала напишите SQL-оператор, который записывает эти условия в макропеременную proc_conditions

proc sql;
  select compbl(name ||' in ('111', '222', '333')')
  into : proc_conditions separated by ' or '
  from sasHelp.vcolumn
  where libName = 'WORK'
    and memName = 'TABLE2'
    and upcase(Name) like 'PROC%'
  ;

Обратите внимание, что libName и memName всегда в верхнем регистре метаданных, тогда как поле Name или смешанный регистр (но без учета регистра). Я добавил Compbl, чтобы уменьшить количество пробелов в одиночном разряде, но это не обязательно.

Вы можете проверить результат proc1 in ('111', '222', '333') or proc2 in ('111', '222', '333') or proc3 in ('111', '222', '333'), записав его в журнал.

  %put &proc_conditions;

Тогда просто используйте это

  create table2 as
  select * from table1 
  where &proc_conditions;
quit;
...