Есть ли способ применить условную логику для сохранения / удаления столбцов в SAS? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь отбросить определенные столбцы в SAS на основе макропеременной, мои руки слегка связаны с тем, какой код я могу использовать - поэтому мне нужно решение в BASE SAS.

Я уже пытался обернуть drop / keep в if, но я знаю, что drop происходит во время выполнения, поэтому это не сработает.

Пример:

data dropsomecolumns;

  if &somemacro =1 then do;
    drop somecol1 somecol2;
  end;

run;

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

Вам либо нужно использовать макрос, чтобы условно генерировать нужный код.

data dropsomecolumns;
  set have;
%if &somemacro =1 %then %do;
  drop somecol1 somecol2;
%end;
run;

Или изменить так, чтобы у макропеременной был список отбрасываемых столбцов.

%let drop_columns=somecol1 somecol2;
data dropsomecolumns(drop=&drop_columns);
  set have;
run;

Обратите внимание, что оператор drop выдаст предупреждение, если в списке нет переменных, но опция drop = dataset не выдаст это предупреждение.

0 голосов
/ 03 апреля 2019

У вас нет переменных в списке, и все будет работать нормально, и предполагается, что вы не должны быть удалены. Поэтому, если макро-переменная является списком переменных, просто используйте:

 drop &drop_columns;

Это отлично работает:

data demo;
    set sashelp.class;
    drop ;
run;

Так что никакая условная логика не нужна.

...