Sas 检查数据集或列中是否存在值

Sas 检查数据集或列中是否存在值,sas,Sas,我有一个宏程序,循环(对于1到n中的I)。对于每个i我都有一个包含许多列-变量的表。在这些列中,我们有一个名为var(他有3个可能的值:a b和c) 因此,对于每个表i,我想检查他的列var是否存在值“c”。如果是,我想将此表导出到excel表格中。否则,我将连接此表与其他表 你能告诉我怎么做吗 好的,在步骤i的宏中,您必须执行以下操作 proc sql; select min(sum(case when var = 'c' then 1 else 0 end),1) into :trigger

我有一个宏程序,循环
(对于1到n中的I)
。对于每个
i
我都有一个包含许多列-变量的表。在这些列中,我们有一个名为
var
(他有3个可能的值:a b和c)

因此,对于每个表
i
,我想检查他的列
var
是否存在值“c”。如果是,我想将此表导出到excel表格中。否则,我将连接此表与其他表


你能告诉我怎么做吗

好的,在步骤i的宏中,您必须执行以下操作

proc sql;
select min(sum(case when var = 'c' then 1 else 0 end),1) into :trigger from table_i;
quit;
%if &trigger = 1 %then %do;
proc export data = table_i blah-blah-blah;
run;
%end;
%else %do;
data concate_data;
set concate_data table_i;
run;
%end;
然后,如果必须执行导出,则宏变量触发器等于1,如果必须执行concatenetion,则为0。接下来,您必须编写如下代码

proc sql;
select min(sum(case when var = 'c' then 1 else 0 end),1) into :trigger from table_i;
quit;
%if &trigger = 1 %then %do;
proc export data = table_i blah-blah-blah;
run;
%end;
%else %do;
data concate_data;
set concate_data table_i;
run;
%end;

如果您不介意导出到.CSV而不是本机xls或xlsx,那么在不了解您的问题的整个九码的情况下,我有可能会说您可能根本不需要宏。我的意思是,如果你使用“Proc Export”,这意味着你无论如何都不能嵌入花哨的格式,你最好在大多数设置中使用.CSV。如果需要包含列标题,则需要深入元数据(字典表)并添加几行

filename outcsv '/share/test/'; /*define the destination for CSV, change it to fit your real settings*/

/*This is to Cat all of the tables first, use VIEW to save space if you must*/
data want1;
set table: indsname=_dsn;
dsn=_dsn;
run;

/*Belowing is a classic 2XDOW implementation*/
data want;
file outcsv(test.csv) dsd; /*This is your output CSV file, comma delimed with quotes*/
do until (last.dsn);
  set want1;
   by dsn notsorted; /*Use this as long as your group is clustered*/
   if var='c' then _flag=1; /*_flag value will be carried on to the next DOW, only reset when back to top*/
end;

do until (last.dsn);
  set want1;
   by dsn notsorted;
   if _flag=1 then put (_all_) (~); /*if condition meets, output to CSV file*/
   else output; /*Otherwise remaining in the Cat*/
end;
drop dsn _flag;
run;

您好Quang,请将您的代码和示例数据以及您以前尝试过的内容发布在这里好吗?@VasilijNevlev:我直接尝试了我的项目,它非常长,所以我不知道如何发布在这里。您好,求和函数返回“.”正常吗?如果表_I有0个观察值,它工作了;谢谢我只是对代码做了一点修改。我只计算了总数。如果它>=1,我将进行导出。我不使用最小值,因为如果数据的观测值为0,则总和将返回“.”,这将使最小值始终=1。为了避免“.”在观测值为0的情况下,您可以对最大值(最小值(…,1),0)进行编码-这样您就得到了最大值(,0)=0