有没有办法应用条件逻辑来保留/删除 SAS 中的列?



我正在尝试根据宏变量删除 SAS 中的特定列,我的手在我可以使用的代码方面略有束缚 - 所以我需要一个 BASE SAS 中的解决方案。

我已经尝试将下降/保持包装在 if 中,但我知道下降发生在运行时,所以这不起作用。

例:

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

您需要使用宏代码有条件地生成所需的代码。

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 选项不会发出该警告。

您没有列出任何变量,它将正常工作,并假设不会被删除。因此,如果宏变量是变量列表,只需使用:

drop &drop_columns;

这工作正常:

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

所以不需要条件逻辑。

最新更新