2014-10-30 96 views
2

我有几个数据库,每个地理变量一个,我想在最后追加。我正在做一些数据步骤。由于我有大型数据库,因此在第一次调用每个表时,我只选择需要的变量。但是在一个变量总是等于0的表上,该变量不在表中。SAS:保存是否存在

因此,当我在for循环中选择我的(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; 

有没有简单的方法来解决这个问题?

回答

1

事实上,我已经发现了解决方案:DKRICOND(或DKROCOND)选项指定错误检测的电平报告,当变量是从分别输入缺失(或输出)的数据的处理过程中设置DROP =,KEEP =或RENAME =数据集选项。

选项是DKRICOND =错误|警告|警告| 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/ */ 
+0

你认为'do i = 1 to 10;'在做什么? – Joe 2014-10-30 15:07:16

+0

我在我的程序中有一个宏循环,我在这里简化了它,它可能根本不起作用。但是,我猜想你已经想出了是否应该为每个area_i运行。 – 2014-10-30 15:40:57

+0

'%do'可以在宏循环中工作。 – Joe 2014-10-30 16:06:00

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; 
+0

你能解释一下你在做什么吗?就像标志一样,如果它在区域中缺失1 – 2014-10-30 11:30:35

+0

@AnonyMartin dictionary.columns包含有关所有数据集中所有列的信息。您可以查询它以确定给定数据集上是否存在'var1'。 – dwjohnston 2014-10-30 20:29:56