首页 > 解决方案 > 保持或删除功能如何在 SAS 中工作?

问题描述

我有一个包含变量 x1、x2、...x6 的表,如果变量的值为 1,或者如果它们的值不是 1,则尝试保留这些变量,然后删除它们。

data a;unid='001'; x1=1; x2=.;x3=0; x4=10; x5=.;x6=1; run;
data aa1; set a;
  if x1=1 then do; keep x1; end;
  if x2=1 then do; keep x2; end;
  ...
  if x6=1 then do; keep x6; end;
 keep unid;
run;
data aa2; set a;
 if x1^=1 then do; drop x1;end;
 if x2^=1 then do; drop x2; end;
 ...
run;

我想要一张桌子:

unid x1 x6
001  1  1

但是,我得到了不同的结果,只是想知道如何解决,谢谢!

标签: sas

解决方案


当您提交代码时,DATA会自动编译一个步骤然后运行。

DROP并且KEEP是 SAS 在编译时使用的语句。它们不在运行时执行。

换句话说,DATA语句中命名的任何输出数据集的结构都是在编译时设置的。该结构不能在运行时更改。

有类似DROP=KEEP=数据集选项可以指定在 i/o 时使用。一个技巧是使用运行时动态组件对象HASH和方法调用。.OUTPUT(dataset: dataset-name(dataset-options))

第二个技巧是累积要保留/删除的变量名称列表,将列表存储在宏变量中,然后在后续步骤中使用(或应用)&list。

第三个技巧是转置/过滤/反转置。


推荐阅读