跳到主要內容

[SAS] 利用PROC IMPORT匯入外部資料

因為資料來源的不同,所以拿到的資料格式往往各式各樣,可能是Excel的xls,xlsx檔,SPSS的sav檔,STATA的dta檔,txt純文字檔,csv檔,dat原始資料檔等等。SAS雖然能使用Import Wizard匯入其他統計套裝軟體和Excel資料,但以我過去的經驗來講,套裝軟體之間的發行時間差太多,或是作業系統因素(參考 【SAS 9.3小技巧】SAS 9.3 64位元版匯入Excel?! ),常常會讓這個功能折騰使用者老半天,所以建議在原生軟體先把資料存成純文字檔讓SAS來讀取(建議存成CSV檔,以逗號來區隔資料的純文字格式),今天將介紹如何用SAS內的PROC IMPORT敘述句來匯入純文字格式的外部資料。(.dat原始資料還是要使用FILENAME+INFLIE敘述句來匯入)

PROC IMPORT的語法結構

PROC IMPORT
 DATAFILE="filename"
 OUT=<libref .="">SAS data set
 DBMS=identifier
 REPLACE;
 GETNAMES=YES|NO;
 GUESSINGROWS=n; DELIMITER=char|'nn'x;

選項說明

  1. DATAFILE="filename"
    宣告待匯入的檔案位置
  2. OUT=<libref .="">SAS data set
    宣告匯出的目標資料集
  3. DBMS=identifier
    宣告匯入的檔案類型,選項有CSV(以逗點區隔),DLM(以空白或符號區隔),TAB(以TAB區隔),JMP
  4. Replace
    宣告匯入的資料覆寫現有的資料集,系統預設是不覆寫,如不宣告則可能導致匯入資料重複,務必注意。
  5. GETNAMES=YES|NO
    宣告是否將資料的第一行當作變項名稱
  6. GUESSINGROWS=n
    PROC IMPORT會自動掃描匯入資料來判斷該變項的類型(數字or文字or日期)與變項的長度,如果資料內的變項長度屬固定值,ISBN、身分證字號,則不需考慮此項目,但如果資料長度是變動的,通常是文字變項,如地址、email等,則此變項需要考慮。預設值是20,固定變項者可以減少該數值以加快匯入速度。
  7. DELIMITER=char|'nn'x
    宣告資料分隔符號,預設值是空白,如設&為區隔符號則DELIMITER="&"。只有當DBMS=DLM時才宣告DELIMITER,DBMS=TAB與DBMS=CVS時皆可省略。

範例

範例一:以TAB區隔的資料
下列資料位置在D:\Data之下,檔名為tab.txt,欲建立在名為mydata的Libary之下,匯入的資料集為tab
Name Gender Age
Joyce F 11
Thomas M 11
Jane F 12
Louise F 12
James M 12
John M 12
Robert M 12
Alice F 13
Barbara F 13
Jeffery M 13
Carol F 14
Judy F 14
Alfred M 14
Henry M 14
Jenet F 15
Mary F 15
Ronald M 15
William M 15
Philip M 16
範例程式1:
PROC IMPORT DATAFILE="D:\DATA\TAB.TXT" OUT=MYDATA.TAB DBMS=TAB REPLACE; GETNAMES=YES; DATAROW=5; RUN; ※上述資料如果直接複製到記事本會變成以空白做間隔的檔案,因此重新調整為以Tab做間隔之後程式就能順利運作。
範例二:以&為區隔符號的資料
下列資料位置在D:\DATA之下,檔名為DelSpec.txt,同樣欲建立在名為Mydata的Libary之下,匯入的資料集名稱為data01 Region&State&Month&Expenses&Revenue
Southern&GA&JAN2001&2000&8000
Southern&GA&FEB2001&1200&6000
Southern&FL&FEB2001&8500&11000
Northern&NY&FEB2001&3000&4000
Northern&NY&MAR2001&6000&5000
Southern&FL&MAR2001&9800&13500
Northern&MA&MAR2001&1500&1000
範例程式2:
PROC IMPORT
DATAFILE="D:\DATA\DELSPEC.TXT"
OUT=MYDATA
DBMS=DLM
REPLACE;
DELIMITER="&";
GETNAMES=YES;
RUN;

範例三:CSV格式檔(資料以逗號做區隔)
下列資料位置在D:\DATA之下,檔名為Newdata.csv,同樣欲建立在名為Mydata的Libary之下,匯入的資料集名稱為data02 "Africa","Boot","Addis Ababa","12","$29,761","$191,821","$769"
"Asia","Boot","Bangkok","1","$1,996","$9,576","$80"
"Canada","Boot","Calgary","8","$17,720","$63,280","$472"
"Central America/Caribbean","Boot","Kingston","33","$102,372","$393,376","$4,454"
"Eastern Europe","Boot","Budapest","22","$74,102","$317,515","$3,341"
"Middle East","Boot","Al-Khobar","10","$15,062","$44,658","$765"
"Pacific","Boot","Auckland","12","$20,141","$97,919","$962"
"South America","Boot","Bogota","19","$15,312","$35,805","$1,229
" "United States","Boot","Chicago","16","$82,483","$305,061","$3,735"
"Western Europe","Boot","Copenhagen","2","$1,663","$4,657","$129"
範例程式3:
PROC IMPORT
DATAFILE="D:\DATA\NEWDATA.CSV"
OUT=MYDATA.DATA02
DBMS=CSV
REPLACE;
GETNAMES=NO;
RUN;

附註:

有些時候會因為情況特殊需要特別處理,譬如大多數樣本的A變項是數值,但某些比較特別的個案在A變項卻是文字,這時候如果沒有處理,IMPORT敘述句就會以數字匯入,並且將A變項是文字的個案變成遺漏值,如果這樣的狀況會影響到後續的資料分析,可以參考這篇文章的做法:以文字格式讀取CSV資料檔中的欄位(變項)

參考資料:

IMPORT Procedure
Avoid truncating characters in PROC IMPORT csv

本著作依據Creative Commons 姓名標示-非商業性-相同方式分享授權條款釋出

留言

熱門文章

[How To] 還不知道怎樣低調還原的鄉民看這裡

本文絕對沒有叫鄉民去領便當的意圖(?)。在批踢踢上的某些專版,會因為某些特別的需要,所以必須使用低調碼來傳遞訊息。有沒有效果當然是見人見智,但板規這麼寫,也只好這麼做。

[How To] 如何將Windows10的數位授權連結(綁定)Microsoft帳號?

前一篇網誌是我在2016年6月那時所寫的,轉眼間現在已經到了2017年年底,雖然中間也不是沒有興起想寫網誌的念頭,但那段期間的生活上也不像過去那般有餘裕,直到最近社畜的生活比較上軌道後,才有機會來想想要寫些什麼。 這次要介紹的是Windows10的數位授權連結,換句話說就是將使用者的微軟帳號( 申請新帳號 )與Windows10的授權綁定。這樣做對使用者會有什麼好處?在你未來要將安裝Windows10的電腦淘汰時,Windows10授權不再是綁定電腦的主機板,而是綁定微軟帳號,所以只要在將擁有Windows10授權的微軟帳號做為新電腦的系統管理員帳號,就可以在新的電腦上使用前一台電腦上的Windows10授權,當然前一台電腦將不再有Windows10的授權。有關 硬體變更(包括更換主機板)之後重新啟用Windows10 的相關說明可以參考微軟的這篇: 硬體變更之後重新啟用 Windows 10 。

[How To] VPN Gate:由日本筑波大學所營運的免費VPN服務

一般使用者會接觸到VPN,最常見的情況就是想訪問被封鎖的網站、匿名上網、又或者想使用某些限定國家或區域的線上服務、遊戲等等。如果使用者不想付費購買VPN服務,這時候可以利用筑波大學以學術研究為目的而營運的 VPN Gate 來達成,VPN Gate這項計畫的目的在於推廣「全球分散式公共VPN中繼伺服器」的相關知識,為此VPN Gate的中繼伺服器由世界各地的志願者所提供的,用戶無須註冊就能使用,並且支援Windows、Mac、iPhone、iPad、Android等不同的作業系統,連線方式除支援SSL-VPN協議(必須使用Softether VPN)外,各伺服器的維護者也能選擇是否支援L2TP/IPsec、OpenVPN、Microsoft SSTP等不同的網路協議,這次我要介紹的是透過Softether VPN Client搭配VPN Gate Client Plugin來進行連線的方法。

[How To] 將手機分享的網路設定為計量付費連線,避免Windows Update吃光你的網路流量。(Windows10)

原本我的規劃是先寫Windows系統重設教學,但昨天發生了一件令人悲痛的事情,讓我決定先寫這個主題。 這裡先講一下事情經過,昨天我帶著筆電去參加教育訓練,接著像其他人一樣用手機分享網路供筆電使用,但是當教育訓練經過兩小時之後,Windows10突然跳出已經準備好Windows Update,電腦需要重新啟動的提示訊息。看到的當下眼前一片黑暗!所以Windows 10在我用手機分享網路給筆電時,默默地下載了Windows Update所需的檔案?可是我的手機並不是網路吃到飽啊!當下立刻用中華客服檢查 了這個月未出帳的網路流量,結果我當天就噴了高達700MB的流量!(我並不常使用筆電,所以累積了不少更新未下載。)

[How To] 關閉Windows 10檔案總管「最近使用過的檔案」功能

剛開始使用Windows 10的使用者,應該會發現檔案總管跟過去有點不同,一打開就會顯示「最近使用過的檔案」。如果電腦只有使用者自己在使用,那的確是挺不錯的功能,但如果是和家人共用的情況下,也等於是直接把最近開對於啟檔案的紀錄暴露出來,對於我這種害羞內向的人來說與公開處刑無異,是個絕對NG的功能。 因此這次就是要告訴各位要怎樣把「最近使用過的檔案」這個NG的功能給關閉,並且將檔案總管的初始畫面調整成過去使用者所熟悉的「我的電腦」。 ▲在未關閉「最近使用過的檔案」的情況下,檔案總管的初始畫面會如上圖這般。

[How To] 在Windows10 家用版啟用本機群組原則編輯器功能(GPedit.msc)

一直以來Windows 10 家用版因為無法啟用「本機群組原則編輯器(GPedit.msc)」,使得不少要有GPedit.msc功能才能調整的設定。譬如Windows更新政策,就會受限於沒有GPedit.msc而無法調整,所以我都將Windows 10 家用視為閹割版,並不建議朋友購買,寧可多花一點錢買專業版。 小秘訣: 如何檢測Windows10的版本?以快捷「 WinKey+R 」叫出「執行」功能,並以「 winver 」關鍵字執行,就會出現「關於Windows」視窗,上面就有記載Windows10的版本。 最近因為 Windows 10 1809版更新的災情 鬧得沸沸揚揚,和朋友聊天的時候又聊到Windows10以來的這一連串災難,這時候我才知道原來我的資訊已經落伍了,Windows 10的家用版其實也可以啟用GPedit.msc,只是需要下指令來執行。今天我就來說明Windows 10家用版的使用者,該如何正確啟用「本機群組原則編輯器(GPedit.msc)」這項超重要的功能。

[How To] 認識Windows 10內建的重灌功能 ─ 「重設此電腦」。

2018/11/5新增: 無法登入Windows10,「重設此電腦」的操作方式。 在Windows 8開始,Microsoft在Windows的還原選項增加一個叫做「重設此電腦」的功能,跟過去依賴還原點的「系統還原」運作方式並不相同。這裡先說明一下Windows「系統還原」的運作方式,Windows會在安裝應用程式、驅動程式、以及系統更新的同時自動建立還原點。如果遭遇到應用程式、驅動程式或者系統更新產生的問題時,就可以用系統還原的方式回溯到系統變更之前的狀態。 但要注意的是,這種還原方式並不會影響到個人檔案,所以當問題是發生在個人檔案時,因為系統並不會針對個人檔案的變動產生還原點,所以還原並無法解決問題,這也是為什麼由惡意程式導致的系統錯誤,用系統還原可能無法解決問題。 咳,有點離題了。總之系統還原是針對新安裝的應用程式、驅動程式,還有系統更新建立還原點。那如果最近沒有安裝新的應用程式、驅動程式還有系統更新,但電腦還是出了問題,那很明顯就不是系統還原可以處理的範圍,這時候我們就需要依賴Windows 8以後新增的「重設此電腦」這項功能了,登登登。

[How To] Fate/Grand Order (F/GO)引繼教學(日文版)

當你下定決心要跳入Fate/Grand Order這個錢坑手遊之後,最重要的事情就是產生一組引繼碼。 倘若你手機遺失、手機損壞又或者是因為蘋果的惡意,要救回F/GO的進度時,輸入引繼碼就像是告訴伺服器,我就是某某某玩家,請把我過去的紀錄與這台手機連結這樣。如果沒有有效的引繼碼,就只能進行 帳號遺失申訴 ,這時就必須提供營運課金相關的紀錄(提供這個帳號曾經使用過已經無效的引繼碼也可),否則就無法證明帳號確實屬於你所有,救回帳號的機會當然也救大大地降低,所以當你確定你要好好的玩F/GO時,最重要的就是 建立一組引繼碼 。 不過千萬要記得 一組引繼碼只限使用一次的原則 ,引繼碼使用過後就必須重新產生一組引繼碼,接下來就說明取得引繼碼的相關步驟。

[How To] 不用關閉Windows Update,Windows 10家用版也有效的延後Windows update方法

在今年2月的時候,我曾經寫過一篇「 [How To] 關閉WIndows 10的驅動程式自動更新 」,當時文章中有提到如何使用「本機群組原則編輯器(GPedit.msc) 」調整Windows Update的時間,但是隨著Windows再度發生令人崩潰的更新災難,我決定調整前一篇文章的內容,在這篇文章好好說明有關更新的相關設定,這篇文章將不只適用專業版以上版本,同時也適用於Windows10家用版的使用者。 首先我們要先清楚Windows 10目前對於更新的分類,主要包括三大類: 功能更新:諸如1709、1803、1809這類每半年一次的版本更新,此類更新會引進行新的作業系統功能,但伴隨而來的,往往是讓使用者無言的花式更新災難。 品質更新:並未引進新的作業系統功能,除了安全性更新以外,也包含修正各種臭蟲的非安全性修補更新。 驅動程式更新:針對系統現有之驅動程式進行版本更新。 使用者對於現行更新政策常見的困擾有兩個,一個是下載與安裝更新的時間缺乏彈性,進而影響到主要工作。另一個就是更新的同時也帶來使用者預料之外的系統問題,像是1803版更新時 導致使用Intel SSD的使用者無法開機 外,這次1809版更新甚至發生 使用者資料夾底下的所有資料因為更新而被移除 這種令人笑不出來的情形,一般人對於這些事情的理解還停留在Windows更新實在很雷的層次,但根據Windows現行的設定,嚴格來講這些問題是由是1803、1809等功能更新所造成,跟品質更新(含安全性更新)的關係較小。 這篇文章分成兩個部分來說,第一個部分會先談如何從整體對Windows Update下載和安裝的時機進行調整,接著說明如何延後Windows接受功能更新而又不影響品質更新(含安全性更新)的安裝,降低使用者在資安上的風險。