SAS:保持存在

时间:2014-10-30 11:05:49

标签: sas selection

我有几个数据库,每个地理变量一个,我想在最后追加。我正在对它们做一些数据步骤。因为我有大型数据库,所以我只选择第一次调用每个表时需要的变量。但是在一个变量总是等于0的表中,变量不在表中。

因此,当我在for循环中选择my( keep = var )时,如果变量存在,则它可以正常工作,但在另一种情况下会产生错误,因此会忽略这些表。

%do i=1 to 10 ; 

data temp;
    set area_i(keep= var1 var2);
run;

proc append base=want data=temp force; 
run;

%end;

有没有一种简单的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果它尚未存在,只需将其添加到表中即可?

/*look at dictionary.columns to see if the column already exists*/
proc sql;
    select name into :flag separated by ' ' from dictionary.columns where libname = 'WORK' and memname = 'AREA_I' and name = 'VAR1';
run;

/*if it doesn't, then created it as empty*/
%if &flag. ne VAR1 %then %do;
    data area_i;
        set area_i;
        call missing(var1);
    run;    
%end;

答案 1 :(得分:1)

实际上我找到了一个解决方案:DKRICOND(或DKROCOND)选项指定错误检测级别,以便在处理DROP =期间分别从输入(或输出)数据集中丢失变量时报告,KEEP =,或RENAME =数据集选项。

选项是 DKRICOND = ERROR |警告|警告| NOWARN | NOWARNING ,所以你只需挥手来设置

dkricond=warn

/*your program, in my case :*/
%do i=1 to 10 ; 
data temp;
    set area_i(keep= var1 var2);
run;
proc append base=want data=temp force; 
run;
%end;

dkricond=error /* the standard value, probably better to set it back after/ */