2016-04-12 15 views
1

Üç tabloyu birleştirmem gerekiyor, her tablo 100K -200K kayıtları arasında. Bu birleşme beş dakika sürer. Aşağıdaki kodu bir karma birleştirmeye dönüştürmek için yardıma ihtiyacım var. Şimdiden çok teşekkürler. Yalnızca niye hesaplamalar ile rahatsız var1-var4 saklıyorsan eğersas hash birleştirme vs veri adım birleştirme

data &dsource..main_input; 
    merge &dsource..sorted_swf (in=here1) 
     &dsource..sorted_input2 (in=here2) 
     &dsource..sorted_input9 (in=here3); 
    by control; 
    if (here1) then do; 
     %recode_div  

     if typec = 45 then elig_hu= '1';  
     else if (status eq '1') or ((status in ('2','3')) and (type in ('1','2','4','6','10','11'))) then elig_hu = '1'; 
     else if (status eq '4') then do; 
     if (noint in (1,2,3,5,6)) then elig_hu = '1'; 
     else if (noint eq 4) or (10 <= noint <= 43) then elig_hu = '0'; 
     end; 
     else if (status in ('2','3')) and (type in ('5','7','8','9'))   then elig_hu = '0'; 
     else elig_hu = '9'; 
     output; 

     keep var1 var2 var3 var4; 
    end; 
run; 

data want; 
    set finput.input2; 
    if _n_ = 1 then do; 
     %create_hash(in2,control,region,"ftest5.swf"); 
     %create_hash(in9,control,hudadmin,"ftest5.input9"); 
    end; 
    /*<initialize lookup variables>*/ 
    rc = in2.find(); 
    rc = in9.find(); 
    if rc then do; 
     /* <handle case where lookup fails>*/ 
    end; 
    drop rc; 
run; 
+1

mı? – Reeza

cevap

0

tut here

genel kullanım dan% create_hash() makro

data want; 
set have; 
format <new variables to look up>; 

if _n_ = 1 then do; 
    %create_hash(obj,keyvar1 keyvar2 ..., lookupvar1 lookupvar2 ..., "lookup data set"); 
end; 

<initialize lookup variables> 
rc = obj.find(); 

if rc then do; 
    <handle case where lookup fails> 
end; 

drop rc; 
run; 
+0

Örnek kodunuzun üst kısmındaki '> 'ifadesi aranıyor? Hash oluşturulmadan önce değişkenlerin tanımlanması gerektiğini belirtmeye mi çalışıyorsunuz? Eğer öyleyse, değişkenleri tanımlamak için 'LENGTH' veya' ATTRIB' kullanmalısınız. – Tom

+0

@ Tom, neden? Hedef değişkeni tanımlıyorsa ve etiketler vb. Umursamıyorsanız, ATTRIB sizi ne satın alıyor? Her ikisi de derleme zamanında işlenir ve değişkeni PDV'ye yerleştirir. – DomPazz

+0

Normalde değişkeni tanımlamak için 'LENGTH' kullanıyorum, fakat' ATTRIB' de kullanabilirsiniz. Ancak "FORMAT", değişkenleri tanımlamak değil, biçimleri eklemek içindir. Bir FORMAT ifadesi kullanarak bir karakter değişkeninin uzunluğunu nasıl belirlersiniz? Karakter değişkenine kalıcı olarak bir biçim eklerseniz, tabloları birleştirdikten sonra çok garip sonuçlar alabilirsiniz. SAS'ın sayısal değişkenlerinizi görüntülemek için kullanılacak formatı seçmesini isterseniz ne yapmalısınız? – Tom

İlgili konular