2015-10-06 113 views
0

我正在從應用統計和SAS編程的練習12.6。註釋:使用列輸入,讀取NAME,GENDER和DOB,其中NAME在第1-10列中,Gender在第12列中,DOB在第13-22列中。請注意,對於列輸入,您必須將出生日期作爲字符讀取。你可以使用下面的例子(我試圖寫這個)。閱讀數據行後缺少數據

a)將出生日期定義爲角色是一個好主意嗎?爲什麼? 我的回答:不,不是一個好主意,因爲我們可以使用這個日期,在其他更進一步的方程中以直接的方式進行計算。

b)將DOB從字符更改爲數字並計算該人的實際日期。

我試着用這個代碼來解決這個問題:

DATA PROB12_6;                               

INPUT  NAME $ 1-10                             
      GENDER $ 12                             
      DOB $ MMDDYY10. 13-22;                            

AGE=yrdif(input(dob,mmddyy10.),today(), 'Age');                       

DATALINES;                                
      1   2    



Cody  M05/11/1981                             
McMaster F11/11/1967                             
Bill Smith M12/25/1999                             
;                                  


PROC PRINT DATA=PROB12_6 (FIRSTOBS=4);                         
RUN; 

我的產量只有名字,在其他變量空值。

我研究了使用絕對列指針,但我沒有運氣。

+0

歡迎。請充分解釋您的目標以及您的預期產出。您是否正在通過示例使用Learning SAS:Ron Cody的程序員指南?這可能有助於添加完整的標題。 – LJW

+0

DOB不應作爲字符讀取,日期以數字形式存儲。你可能在日誌中收到錯誤,你可以發佈嗎? – Reeza

+0

是的,這是事實,但如果我沒有曲解練習說的話,必須輸入類似的字符,然後在代碼中改變它並使用它來計算年齡。但是我卡在打印部分,只有打印名稱。我希望現在更清楚。謝謝。 – DarioC

回答

0

第一個問題:

DOB $ 13-22;                   

這裏取下格式。您正在初始化一個字母數字變量,並嘗試將其格式化爲數字日期,因此無法在此處對其進行格式化。

問題二:

這也許這裏是一個形式問題stackexchange,但我複製你的代碼,並得到這個工作,我不得不使用這個值(性別是第13位):

INPUT  NAME $ 1-10 
      GENDER $ 13 
      DOB $ 14-23; 

當我測試時,結果爲此:

      . 
Cody  M 05/11/1981 34.405479452 
McMaster F 11/11/1967 47.901369863 
Bill Smith M 12/25/1999 15.780821918 
+0

謝謝!我無法獲得程序中的實際年齡,是否有任何額外的代碼,以便使用數據行中的數據計算年齡? – DarioC

+0

@darioc我沒有使用這個結果的extracode,只是粘貼你的代碼和我的答案中的2個變化。也許你應該發佈日誌,如果你仍然沒有結果。我猜它是一個範圍問題。或者我誤解了你的評論,你的意思是別的嗎?yrdif還會在前4個日期中拋出錯誤(因爲它們不是真正的日期值)。也許你必須在這裏降低你的錯誤設置,或者在調用yrdif之前檢查dob的正確日期格式 – kl78