[爆卦]sas與資料處理是什麼?優點缺點精華區懶人包

為什麼這篇sas與資料處理鄉民發文收入到精華區:因為在sas與資料處理這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者joyce618 (joy)站內Statistics標題[程式] 有關sas資料處理的問題想請教...



------------------------------------------------------------------------


[軟體程式類別]:
SAS

[程式問題]:
資料處理

[軟體熟悉度]:
低(1~3個月)

[問題敘述]:
不好意思,由於最近在寫sas的作業,有出現一些資料處理的問題,
需要再麻煩各位大人了

原始的TXT檔長相如下:
公司 年 月 日 概估年月 財務報表公告日
XXXX 甲公司 2010 4 30 200912 20100430
XXXX 甲公司 2010 4 30 201003 20100430
XXXX 甲公司 2010 8 31 201006 20100831
XXXX 甲公司 2010 10 29 201009 20101029
YYYY 乙公司 2010 3 10 201002
YYYY 乙公司 2010 4 9 201003 20100429
YYYY 乙公司 2010 4 29 200912 20100429
YYYY 乙公司 2010 4 29 201003 20100429

因為之前有讀取過類似格式的TXT檔,發現偶有些TXT檔好像導出資料的時候用
TAB做分隔,因此讀取的時候我是另加DELIMITER='09'X的語法,這次也是利用
這樣的方式讀取TXT檔,但是在檔案中財務報表公告日那列原來為空格的儲存
格,讀進SAS後竟然不是遺失值,而是自動讀取公司代碼,因為我原來打算要把
有空格那列的資料刪除,可是這下就沒辦法用「IF 變數=. THEN DELETE」的作法,
後來我試著用「IF 變數=公司代碼 THEN DELETE」,可是我發現,有些空白格讀
入的不一定是同一列的公司代碼,而是下一列不同的公司代碼,因此到這裡小妹
又卡住了,不知道要如何將財務報表公告日那列原來為空格的那筆資料刪除?

另外,想請問一下,像這種以tab為分隔的txt檔,在讀取的時後,有沒有什麼
辦法可以可以將連在一起的概估年月,像是200912分割成2009 12,財務報
表公告日也是一樣,想把連在一起的年月日分割,我原來有試著用欄位輸入法,
可是好像原始檔用tab分隔的檔案,讀取的時候欄位都會跑掉,之所以要分割是
因為要將概估年月是2009年的刪掉,只想留下2010年的部份,雖然看起來原始
檔案中已經分開列示的年月日等變數和財務報表公告日很像,但是因為我還要將
這個檔案和另外一份合併,再以財務報表公告日為主去比對出另外一份檔案中,
和這份檔案財務報表公告日相同的資料,抓取前後20天的資料,所以在一開始
讀取上述的原始txt檔時,希望盡量能將可以比對的年月日分開列示,以方便進
行比對合併資料。

最後,想請問一下,由於原始TXT檔中,同一家公司可能會出現兩次同樣的概估年度
,如果出現重複的情形,我只想保留第一筆資料,不知道用「NODUPKEY」的語法能不能
處理呢?
不好意思,麻煩各位了,謝謝^^
-----------------------------------------------------------------------------

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.244.73
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

你可能也想看看

搜尋相關網站