2016-04-12 102 views
1

除了SUM以外,SAS確實缺少行函數。我想對縱向數據集的波浪內的某些擴展缺失代碼進行計數。SAS:將varlist傳遞給sas宏

我可以使用數組來處理每個wave的硬編碼varlist,但是我沒有運氣製作一個可以爲每個wave調用的宏。這個問題似乎無法通過varlist,特別是如果使用first-last notation。

data xxx; 
    input a b c d e f; 
    datalines; 
1 2 3 4 5 6 
.w .w .w .w .w .w 
3 4 5 .w .w .w 
    ; 
run; 

data yyy(drop=i); set xxx;  
    array wave1vars(*) a--c; 
    wave1count = 0; 
    do i = 1 to dim(wave1vars); 
    if wave1vars(i) = .w then wave1count = wave1count +1; 
    end; 

    array wave2vars(*) d--f; 
    wave2count = 0; 
    do i = 1 to dim(wave2vars); 
    if wave2vars(i) = .w then wave2count = wave2count +1; 
    end; 
run; 
+1

我不明白爲什麼你不能傳遞一個varlist,因爲宏參數%mymac(varlist = a - c)的值可以正常工作。 – Tom

回答

1

您還可以避免陣列一起,通過使用CATT()函數的值轉換爲一個連接字符串,然後計算字符串中發現W公司的數量,如:

343 data want; 
344 input a b c d e f; 
345 wave1count=countc(catt(of a--c),'W'); 
346 wave2count=countc(catt(of d--f),'W'); 
347 put _all_; 
348 datalines; 

a=1 b=2 c=3 d=4 e=5 f=6 wave1count=0 wave2count=0 _ERROR_=0 _N_=1 
a=W b=W c=W d=W e=W f=W wave1count=3 wave2count=3 _ERROR_=0 _N_=2 
a=3 b=4 c=5 d=W e=W f=W wave1count=0 wave2count=3 _ERROR_=0 _N_=3 
NOTE: The data set WORK.WANT has 3 observations and 8 variables. 

352 ; 
353 run; 
+0

這工作得很好。謝謝。 –

0

嘗試

wave1count = nmiss(of a--c); 
wave2count = nmiss(of d--f); 
+0

可能值得指出的是,這將計算*所有*缺少的值,而不僅僅是'.w'。我懷疑在這種情況下陣列已經是最好的選擇。 – user667489

+0

是的,missing()和Nmiss()對SAS中的28個缺失代碼不敏感。在這種情況下 。是用於項目不答覆的,.S是由於skip-n-fill造成的結構缺失,而.w是缺少波的。這些差異可以在插補過程中處理,但我需要創建波浪丟失標誌,因爲一些後續分析可能會將數據堆疊得很高並消除波浪丟失(例如,危險模型) –

+0

如果它是波浪丟失的標誌,那麼它並不是一個真正的響應者級別的領域。這實際上是關於調查的元數據。 – Tom

1

爲什麼你需要一個宏?爲什麼不使用多維數組。除非每個問題的問題數量不同?

missing w; 
data have; 
    input a b c d e f; 
cards; 
1 2 3 4 5 6 
w w w w w w 
3 4 5 w w w 
;;;; 

data want ; 
    set have ; 
    array wavevars (2,3) a--c d--f ; 
    array wavecount (2) ; 
    do i=1 to dim(wavecount); 
    wavecount(i)=0; 
    do j=1 to dim2(wavevars); 
     wavecount(i)+.w = wavevars(i,j); 
    end; 
    end; 
    drop i j ; 
run; 
+0

很好的答案。這就是說,當我試圖使用二維數組時,我經常意識到我最好轉移數據。所以如果波1和波2的3個變量相同,則從具有六個變量的三行變爲具有四個變量(波,a,b,c)的六行。只是一個想法。 – Quentin

+0

我喜歡二維陣列,但變量的數量可能會略微不同於波浪,我可以想象縱向研究的區別更大。 –