SAS編程:導(dǎo)入EXCEL時(shí),Proct Import與Libname語(yǔ)句使用注意點(diǎn)

如果在工作中疼鸟,需要將保存在EXCEL的數(shù)據(jù)集內(nèi)容導(dǎo)入到SAS后控,并進(jìn)行變量的屬性處理,一般會(huì)涉及Import過(guò)程步空镜。這過(guò)程可能會(huì)遇到一些導(dǎo)入問(wèn)題浩淘,以下是我梳理的相關(guān)內(nèi)容捌朴。

1. EXCEL導(dǎo)入數(shù)據(jù)集

EXCEL內(nèi)容導(dǎo)入SAS數(shù)據(jù)集,常用的方法是Import過(guò)程步张抄,為了文件處理方便砂蔽,我先把EXCEL文件地址設(shè)為工作路徑。

**Set work space;
%sysexec cd "E:\08_SAS\01_import";

EXCEL文件中署惯,頁(yè)面如下察皇,第1行為變量Lable,第2行為變量名稱泽台,之后就是具體的觀測(cè)數(shù)什荣。

DM

使用Import過(guò)程步,進(jìn)行初步導(dǎo)入怀酷。從結(jié)果中可以看出稻爬,所有的數(shù)據(jù)都是從字符讀入,并且日期格式也是讀成了數(shù)字蜕依。關(guān)于日期數(shù)字問(wèn)題桅锄,這里不進(jìn)一步解釋,感興趣的讀者可以參考SAS編程:關(guān)于EXCEL時(shí)間變量導(dǎo)入SAS數(shù)據(jù)集的問(wèn)題样眠。

**Import EXCEL;
proc import datafile="test.xlsx"  /*or datafile="E:\08_SAS\01_import\test.xlsx"*/
    out=DM1 dbms=xlsx replace;
    sheet = "DM";
    getnames = no;
run;

DM1

2. 特定EXCEL記錄導(dǎo)入數(shù)據(jù)集

2.1 range = 選項(xiàng)

雖然字符格式后續(xù)也方便處理成想要的屬性友瘤,但是SAS導(dǎo)入的時(shí)候也方便自動(dòng)處理。這里我們可以直接將第2行的信息讀取成變量名稱檐束,第3行開(kāi)始讀取成SAS記錄數(shù)辫秧。導(dǎo)入的數(shù)據(jù)集,自動(dòng)將全部為數(shù)字的列轉(zhuǎn)化為數(shù)值變量被丧。(關(guān)于range=選項(xiàng)盟戏,可以參考SAS官方文檔SAS Help Center: Microsoft Workbook Files)。

**Import EXCEL 2;
proc import datafile="test.xlsx"
    out=DM2 dbms=xlsx replace;
    range="DM$A2:"n;
    getnames = yes;
run;
DM2
2.2 sheet = 選項(xiàng)能否實(shí)現(xiàn)甥桂?

處理讀入EXCEL記錄時(shí)柿究,有些讀者可能會(huì)考慮使用sheet = "DM";datarow = 2以及getnames = yes;進(jìn)行實(shí)現(xiàn)從第2行讀入并將第2行讀取為變量名稱黄选。事實(shí)上蝇摸,這樣無(wú)法實(shí)現(xiàn)想要的效果

雖然办陷,語(yǔ)句sheet = "DM";range="DM$:"n;是等價(jià)的貌夕,我們可以正常導(dǎo)入sheet頁(yè)面中所有的信息,但是語(yǔ)句getname =指定IMPORT過(guò)程懂诗,是否從輸入文件第一行的數(shù)據(jù)值生成SAS變量名蜂嗽。而數(shù)據(jù)集所需要的變量名稱保存在第2行,所以無(wú)法用來(lái)直接命名殃恒。(SAS Help Center: Syntax: PROC IMPORT GETNAMES Statement)

不過(guò)植旧,語(yǔ)句datarow = 3可以讀取所需要的數(shù)據(jù)記錄辱揭。

**Import EXCEL 3;
proc import datafile="test.xlsx"
    out=DM3 dbms=xlsx replace;
    sheet = "DM";
    datarow = 3;
    getnames = yes;
run;
DM3

這一點(diǎn)與Data步中,whereif語(yǔ)句篩選記錄的對(duì)比關(guān)系類似病附。where語(yǔ)句篩選進(jìn)入數(shù)據(jù)集處理的觀測(cè)記錄问窃;而if語(yǔ)句在納入所有觀測(cè)記錄后,再進(jìn)行篩選完沪。

Import過(guò)程步中域庇,語(yǔ)句range="sheet$XX:XX"n篩選好進(jìn)入SAS數(shù)據(jù)集的EXCEL記錄;而語(yǔ)句datarow = n;覆积,是在進(jìn)入SAS數(shù)據(jù)集的記錄中听皿,進(jìn)行篩選

編程中宽档,使用range語(yǔ)句篩選記錄尉姨,更精準(zhǔn)一些。

3. Libname語(yǔ)句使用注意點(diǎn)

在這篇文章中吗冤,就不介紹批量設(shè)置變量Label的過(guò)程又厉。在設(shè)置單個(gè)數(shù)據(jù)集屬性后,需要批量導(dǎo)入EXCEL Sheet內(nèi)容椎瘟。批量處理的關(guān)鍵是覆致,獲取所有Sheet的名稱。這里可以肺蔚,通過(guò)將EXCEL設(shè)置為SAS邏輯庫(kù)來(lái)實(shí)現(xiàn)煌妈,代碼如下。目前婆排,test.xlsx文件中有兩個(gè)sheet(DM声旺,VS)。

libname tmp excel "test.xlsx";
Library

導(dǎo)入的數(shù)據(jù)集內(nèi)容段只,是sheet中的所有信息。信息保存到邏輯庫(kù)中鉴扫,我們就可以通過(guò)SAS字典赞枕,來(lái)獲取EXCEL中sheet名稱和數(shù)目信息,并把這兩個(gè)信息保存到宏變量&sheetnam坪创、&sheetnum中炕婶。

關(guān)于Proc SQL如何將一整列變量值或一行記錄值保存到宏變量,可以參考SAS編程:Proc SQL生成宏變量時(shí)INTO子句的使用莱预。

*Get sheet names and sheet num and save them into macro vars;
proc sql noprint;
        create table tmp1 as
            select  distinct scan(memname, 1, "$") as name, count(distinct scan(memname, 1, "$") )  as num
        from dictionary.tables
        where libname = "TMP";

    select  distinct scan(memname, 1, "$"), count(distinct scan(memname, 1, "$") )  into: sheetnam separated by "!" , :sheetnum
        from dictionary.tables
        where libname = "TMP";
quit;
name and num

經(jīng)過(guò)一番整理后柠掂,批量處理Sheet的程序基本完善,但是批量使用Import過(guò)程步時(shí)依沮,會(huì)出Error涯贞。

proc import datafile="test.xlsx"
    out=DM dbms=xlsx replace;
    sheet = "DM";
    getnames = no;
run;
Error

檢查后發(fā)現(xiàn)原因:邏輯庫(kù)在調(diào)用EXCEL時(shí)枪狂,Import過(guò)程步無(wú)法讀取EXCEL信息。這個(gè)問(wèn)題取消邏輯庫(kù)的分配可以解決宋渔。

在日常編程中州疾,如果需要臨時(shí)使用邏輯庫(kù),使用完畢后可以立即釋放皇拣,避免后續(xù)調(diào)用出現(xiàn)問(wèn)題严蓖。

libname tmp excel "test.xlsx";

結(jié)語(yǔ)

本文介紹了使用Proct Import將EXCEL文件導(dǎo)入SAS數(shù)據(jù)集時(shí),記錄篩選氧急、命名的問(wèn)題颗胡,建議使用range語(yǔ)句篩選記錄,避免偏誤吩坝。對(duì)于臨時(shí)邏輯庫(kù)毒姨,建議使用完畢后立即釋放,避免后續(xù)調(diào)用文本出現(xiàn)問(wèn)題钾恢。

感謝閱讀手素!若有疑問(wèn),歡迎評(píng)論區(qū)交流瘩蚪!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泉懦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疹瘦,更是在濱河造成了極大的恐慌崩哩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件言沐,死亡現(xiàn)場(chǎng)離奇詭異邓嘹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)险胰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門汹押,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人起便,你說(shuō)我怎么就攤上這事棚贾。” “怎么了榆综?”我有些...
    開(kāi)封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妙痹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鼻疮,道長(zhǎng)怯伊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任判沟,我火速辦了婚禮耿芹,結(jié)果婚禮上崭篡,老公的妹妹穿的比我還像新娘。我一直安慰自己猩系,他們只是感情好媚送,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著寇甸,像睡著了一般塘偎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拿霉,一...
    開(kāi)封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天吟秩,我揣著相機(jī)與錄音,去河邊找鬼绽淘。 笑死涵防,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沪铭。 我是一名探鬼主播壮池,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杀怠!你這毒婦竟也來(lái)了椰憋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赔退,失蹤者是張志新(化名)和其女友劉穎橙依,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體硕旗,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窗骑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漆枚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片创译。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖墙基,靈堂內(nèi)的尸體忽然破棺而出昔榴,到底是詐尸還是另有隱情,我是刑警寧澤碘橘,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站吱肌,受9級(jí)特大地震影響痘拆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氮墨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一纺蛆、第九天 我趴在偏房一處隱蔽的房頂上張望吐葵。 院中可真熱鬧,春花似錦桥氏、人聲如沸温峭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凤藏。三九已至,卻和暖如春堕伪,著一層夾襖步出監(jiān)牢的瞬間揖庄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工欠雌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹄梢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓富俄,卻偏偏與公主長(zhǎng)得像禁炒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霍比,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容