2015-11-03 64 views
0

之間的線,使我有過很多的時間間隔是這樣的SAS規範總結日期

obs | date_of_service | units | CPT | ID 
----------------------------------------- 
    1. | 11/03/2015 | 40 |xxxx6| 234 
    2. | 11/04/2015 | 1 |xxxx5| 234 
    3. | 11/11/2015 | 1 |xxxx5| 234 
    4. | 11/18/2015 | 1 |xxxx5| 234 
    5. | 11/20/2015 | 40 |xxxx6| 234 
    6. | 11/25/2015 | 1 |xxxx5| 234 
    7. | 12/02/2015 | 1 |xxxx5| 234 
    etc.... 

東西很多IDS數據, 什麼,我需要做的是總和的CPT xxxx6之間OBS爲單位每個區間因爲它是一個包含許多唯一ID的非常大的數據集。

好了,所以這是我現在有:(。)

%MACRO lags(); 
    %let n=1; 
    data out; 
     set in; 
     by id Date_of_service ; 
     DO _n_=&n. until (last.id); 
     if (id=lag&n.(id) and CPT="xxxx6") then do; 
      if units ne . then output; 
      call missing (TOTAL); 
     end; 
     if CPT="xxxx5" or CPT= "xxxx7" then TOTAL + count; 
     END; 
    run; 
%MEND; 
%lags 

的問題是,如果我有兩個或連續多xxxx6之間沒有我得到一個空一個xxxx5或xxxx7值或0在TOTAL列中。而且我沒有爲xxxx6 cpt的所有ID獲得第一條觀察線。

+0

你試過了什麼代碼? –

+0

你想讓你的輸出看起來像什麼? – Reeza

+0

我試着用lag&n做兩個宏循環。 (服務日期)並用標籤標記並試圖總結它們。我只能想象這會是一個普遍的問題... – gduhoffmann

回答

1

編輯答案,因爲我不知道如何發佈一個新的: 尋找CPT =「xxx6」,並在那個點存儲變量。然後遍歷下一行累加單元,直到達到下一個xxx6並在重複之前輸出。如果最後一組觀察值沒有達到xxx6,這將導致問題。另外,如果ID從234到235中單元計數發生變化,會發生什麼情況?在解決方案中,需要使用234作爲總和ID。

data In; 
infile cards; 
input OBS DATE_OF_SERVICE:mmddyy10. UNITS CPT:$5. ID; 
format DATE_OF_SERVICE date9.; 
cards; 
1 11/03/2015 40 xxxx6 234 
2 11/04/2015 1 xxxx5 234 
3 11/11/2015 1 xxxx5 234 
4 11/18/2015 1 xxxx5 234 
5 11/20/2015 41 xxxx6 234 
6 11/25/2015 1 xxxx5 234 
7 11/25/2015 1 xxxx5 234 
8 11/25/2015 45 xxxx6 234 
; 
run; 

data OUT(drop=ID UNITS DATE_OF_SERVICE OBS 
rename=(STORE_UNITS=UNITS STORE_ID=ID STORE_DATE=DATE_OF_SERVICE STORE_OBS=OBS)); 
set IN; 
retain STORE_OBS STORE_DATE STORE_UNITS STORE_ID; 
if CPT="xxxx6" then do; 
    if STORE_UNITS ne . then output; 
    call missing (TOTAL); 

    STORE_UNITS=UNITS; 
    STORE_DATE=DATE_OF_SERVICE; 
    STORE_ID=ID; 
    STORE_OBS=OBS; 
end; 
if CPT="xxxx5" then TOTAL+UNITS; 
run; 

proc print; run; 
+0

我會給它一個我的數據。謝謝。 – gduhoffmann

+0

對於單獨計數的每個間隔,我需要具有CPT「xxxx6」的行之間的CPT「xxxx5」單位的總和。即在第一組中,單位的總和在3秒內至少爲1(因爲我停下來,但假設它是在每個間隔中沒有標準觀察值的重複序列)。 – gduhoffmann

+0

,所以這些彙總值可以放在與前面的觀察相同的線上(即,觀察者2,3,4的總和將被放置爲觀察者1上的新值並且觀察者6,7,8等的總和將是放在obs 5等)我希望這有助於澄清。感謝所有的幫助和建議! – gduhoffmann