2016-04-13 26 views
0

問題

做某事在SAS最後觀察,可以設置一個年底 -flag,例如如何合併SAS數據集時檢測(只)一個文件的末尾

data myResult; 
    merge myInput1 (in=in1) myInput2 (in=in2) end=last; 
    by myKey; 
    ** Do some stuff **; 
    if last then ** Do special stuff **; 
run; 

但是,我如何才能對我的一個輸入做出反應? myInput1 (in=in1 end=end1)不起作用。

語境

我想兩個大型數據集的內容進行比較,從而限制到999個觀察。如果myInput1包含在中間的一些額外的意見,我的程序報告,而且從myInput2一些線myInput1被排除在obs=999子句。我其實想寫:

data diff_&memName.; 
    format problem $20.; 
    merge myInput1(in=in1 end=end1 obs=999) 
      myInput2(in=in2 end=end2 obs=999) 

    by moederartikelnr; 
    select; 
     when (end1 or end2) delete; 
     when (not inFrom) problem = "only in 1_PROD"; 
     when (not inTo) problem = "only in 2_DVLP"; 
     when (not first.moederartikelnr or not last.moederartikelnr) 
      problem = 'duplicate key'; 
     otherwise delete; 
    end; 
run; 

如果你能以另一種方式幫助我,也請這樣做。

回答

1

根據您的上下文,我認爲在1000次迭代之後停止DATA步驟可能會更容易。在每次迭代中,從任一數據集或兩者讀取一條記錄。所以經過999次迭代後,999個記錄將被讀取(兩者不一定是999)。使用這種方法,您不需要OBS =選項,這樣可以避免錯誤的匹配。喜歡的東西:

data diff_&memName.; 

    if _n_=1000 then stop; *stop on 1000th iteration; 

    format problem $20.; 
    merge myInput1(in=in1) 
      myInput2(in=in2) 
    ; 
    by moederartikelnr; 
    select; 
     when (not in1) problem = "only in myinput2"; 
     when (not in2) problem = "only in myinput1"; 
     when (not first.moederartikelnr or not last.moederartikelnr) 
      problem = 'duplicate key'; 
     otherwise delete; 
    end; 
run; 
相關問題