推 west1996:1.原始檔有missing的問題可以參考missover和truncover這 06/06 13:10
→ west1996:兩個option 06/06 13:10
→ west1996:2.如果要切年月日的話在input這一句的變數指定方法要作 06/06 13:11
→ west1996:修改,要跟SAS說每一個變數要從txt的第幾欄讀到第幾欄, 06/06 13:11
→ west1996:語法請參考help的「input」條目下的list 06/06 13:13
→ west1996:3.在讀取外部檔階段似乎不能去重複? 06/06 13:14
先謝謝大人的回答,可能是我表達的不是很清楚,針對大人第一個回答,在原始
檔中空格的部份,我原來以為讀進sas檔中會是遺失值,這樣我就可以針對遺失
值的部份,利用if語句刪除那列,但是,實際操作後,發現sas讀取的時候,原
始檔中原來是空格的部份,sas會自動帶入下一列的公司簡碼,這樣一來,我就
不知道要如何能刪除原始檔中原來是空格的那列資料,因為原始檔好像是用tab
去做分隔,我不太確定是不是因為這個原因所導致這樣的情形,另外,我也有試
過大人所提的,在input時指定每一個變數要從第幾欄到第幾欄,可是,可能是
因為原始檔不是以空格做分隔,而是以tab做分隔,我在原始檔數的欄位,在 sas
讀取後反而會全部跑掉,因為之前沒碰過這樣的情形,所以想請教各位一下,謝
謝^^
剛剛試著參考其他文章選取欄位的作法
試著寫了一段程式
DATA d;
INFILE anndatee DELIMITER='09'X FIRSTOBS=2;
INPUT code name$ yr1 month1 date1 Quarter$ annodate$;
DROP yr1 month1 date1;
if length(annodate) eq 4 then delete;
yr2=substr(Quarter,1,4);
month2=substr(Quarter,5,2);
run;
可是我發現又出現以下問題:
1.在log視窗內,出現這段note
NOTE: 4859 records were read from the infile ANNDATEE.
The minimum record length was 26.
The maximum record length was 39.
SAS went to a new line when INPUT statement reached past the end of a line.
The data set WORK.D has 4609 observations and 6 variables.
雖然原始檔有4859筆資料,但是讀進sas檔卻只有4609筆???
2.原來設定Quarter及annodate變數時並未改成文字型態,但是採用substr的話卻無法
產生我想要抓取的年月,所以後來改成文字型態進行處理,不知道這樣作對不對,因為
如果要和另外一個檔案以年月進行比較的話,勢必要將該檔案的年月改成文字型態,才
能進行比較。
不好意思,因為老師作業提供的原始檔實在很怪,所以一直出現問題,還請各位多多包涵
謝謝^^
※ 編輯: joyce618 來自: 114.43.116.83 (06/06 23:47)
推 west1996:先在infile後面加上missover和truncover這兩個關鍵字看看 06/07 00:09
→ west1996:比數會錯就是因為原始資料裡面有missing的原因,先把筆數 06/07 00:10
→ west1996:和資料讀對了,再來考慮後面的問題,不然也是白搭XD 06/07 00:10