Где пункт в OPEN, чтобы найти уникальные значения - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь написать макрос, который будет возвращать количество наблюдений в наборе данных, с опцией 'where', которая будет возвращать количество наблюдений, которые удовлетворяют этому условию.

Я был для этого используйте функцию OPEN SAS, как показано в следующем примере:

%macro test(WHERE); 
 %let DSID = %sysfunc(open(sashelp.cars(where=(&WHERE)), i)); 
 %let NOBS = %sysfunc(attrn(&DSID, NLOBSF) ); &NOBS 
 %let RC   = %sysfunc(close(&DSID));
%mend test;

%put %test(WHERE=make='Audi'); 

Вопрос:

Есть ли спецификация c WHERE предложение, которое заставит его возвращать уникальные значения для определенного c столбца (например, Make)? Что-то вроде способности distinct в PROC SQL (я не могу на самом деле использовать PROC SQL, поскольку вывод больше не работает с %put?

1 Ответ

3 голосов
/ 02 апреля 2020

Нет where, который будет возвращать уникальные значения.

Вы можете использовать функцию doSubL для отправки кода шага в сеансе стороны. Сеанс стороны не будет регистрироваться как шаг в потоке отправки вызова.

Пример:

%macro cars_distinct(var=);
  %local list rc;
  %let rc = %sysfunc(doSubL(%str(
    proc sql noprint; 
      select distinct &var into :list separated by ' '
      from sashelp.cars
    quit;
  )));
  &list.
%mend;

%put %cars_distinct(var=make);

Примечание: обработка BY или CLASS часто является лучшей практикой по сравнению с выполнением некоторый процесс (или другой вызов макроса) несколько раз, когда вы l oop просматриваете отдельный список значений.

...