一、邏輯庫、數據集、數據字典
數據字典>邏輯庫>數據集
邏輯庫=工作空間,存儲四類內容,test是數據集文件,views是視圖(相當于R里面的views點擊查看),formats代表文件,sasmacr代表目錄內容。
數據集,包括數據文件+SAS視圖,可以像R中雙擊獲取數據結構圖表,不過這樣效率較低,可以使用其他方法,譬如數據字典的方式describe view,詳細內容見三、數據查看。
數據字典,是當年進程中所有內容的邏輯庫、數據表的一個平鋪、列出來。所以,在全局檢索上十分有效。我覺得這個非常有用,不過貌似網上對其的定義比較少。
[html]?view plaincopy print?
libname?fv?"F:\SAS\SAS?9.4?space";??????/*fv是數據庫名字*/?? data?fv.forever;????/*??#forever代表在fv下的forever數據集*/?? Input?x?y?z;?? Cards;??????????????? 1?2?3?? 4?5?6?? ;?? run;??
code解讀:
libname建立邏輯庫,相當于R中的workspace中的一個文件夾;
data代表數據表格,data.frame;
與R數據輸入不同的是,數據之間不是用逗號,而是空格來進行分割。
1、關于libname
如果,沒有libname步驟,直接,data,那么就默認存放在SAS中的默認邏輯庫之中,默認邏輯庫名字叫“work”。
[html]?view plaincopy print?
libname?lb?clear;???????#刪除??
代表刪除libname
2、關于數據字典
本節參考海納百川BLOG的:SAS數據字典訪問
訪問數據字典方法如下:
1.直接用SQL語句訪問Dictionary table
2.訪問SAShelp View
| 表名 | 包含信息 | 視圖名 |
| DICTIONARY.CATALOGS | SAS目錄冊及所包含的條目 | SASHELP.VCATALG |
| DICTIONARY.COLUMNS | 列(或變量)及其特征 | SASHELP.VCOLUMN |
| DICTIONARY.DICTIONARIES | 所有表詞典 | SASHELP.VDCTNRY |
| DICTIONARY.EXTFILES | 文件標識名和外部文件物理存儲地址 | SASHELP.VEXTFL |
| DICTIONARY.INDEXES | SAS數據集索引 | SASHELP.VINDEX |
| DICTIONARY.MEMBERS | SAS數據集 | SASHELP.VMEMBER |
| DICTIONARY.OPTIONS | 目前設定的SAS系統選項 | SASHELP.VOPTION |
| DICTIONARY.STYLES | ODS類型 | SASHELP.VSTYLE |
| DICTIONARY.TABLES | SAS數據文件和視圖 | SASHELP.VTABLE |
| DICTIONARY.VIEWS | SAS數據視圖 | SASHELP.VVIEW |
?
[html]?view plaincopy print?
/*數據字典把當前SAS環境中的所有內容進行匯總歸類到這個里面,方便檢索*/?? proc?sql?flow=10;?? title2?'do?the?columns?have?formats,informats,or?labels';?? title3?'dictionary.columns';?????????????????????????????????????? /*#所有表的列變量*/?? create?table?colinf?as?? select?name,type,length,label,format,informat???????????????????? /*#變量名稱*/?? from?dictionary.columns?? where?libname='SASHELP'?and?memname='CLASS';?? /*#注意要大寫????*/??
打開explorer window,在SASHELP這個library下,以V開頭的視圖實際上是Dictionary table內容的復制。如
proc sql;describe view sashelp.voption;quit;
? ?可以看到voption這個視圖的內容來自dictionary.options。? ?而對于View,除了SQL,直接用data步或proc步都可以訪問。如
[html]?view plaincopy print?
data?test2;?? set?sashelp.vcolumn;?? where?libname="WORK"?and?memname="TEST";?? run;??
或者
proc contents data=sashelp.voption;
run;或者在command欄輸入viewtable sashelp.voption。
——————————————————————————————————————————
二、SAS的數據導入與其他平臺接入方式
SAS獲取數據的幾個方式:外部數據導入、passthrough方式、import方式、input方式。大多通過libname來調入。
1、數據庫外部接入
[html]?view plaincopy print?
/*#數據庫,外部接入*/?? libname?hsdb?db2?user=xxuser?password="xxxx"?datasrc=datadb;?? /*??#在邏輯庫hsdb中,db2代表數據庫名稱,datasrc代表SQL中的數據集名稱*/??
還有RODBC訪問。
[html]?view plaincopy print?
/*通過RODBC訪問?需要設置很多內容*/?? libname?odb?odbc?user=***?password=***?datasrc=test;?? libname?hsdb?odbc?noprompt="uid=xxxuser;pwd=xxxxx;dsn=datadb;"?schema=hsuser??
2、外部導入,spss數據
[html]?view plaincopy print?
/*SPSS數據集,外部接入*/?? libname?sps?spss?'';??
3、oracle數據集,外部接入
[html]?view plaincopy print?
/*oracle數據集,外部接入*/?? libname?oralib?oracle?user=xxx?pw=xxx?path?dbmssrv?schema=educ;??
4、input方式導入數據
input里面有很多小符號,譬如@@ 和@的區別,$&。不過,也正是這些符號,讓我覺得... 導個數據也忒費勁了...不過,這個也是數據輸入中最復雜的問題了。。
關鍵就在這指針問題上,
@代表指針還在這行,只能罩著下一個input,如果沒有兩個input,那么跟沒有@一樣,直接跳到下一行;接下來一個有,則相當于指針在這行;
@@代表指針一直在同一行;
沒有@,代表指針跳到下一行。
"$",表示字符型變量,&代表數值型。
[html]?view plaincopy print?
data?test;?? ????infile?cards?;?? ????input?x?@;???????/*單個@,能H住,有效期到下一個input語句*/?? ????input?y;???????????/*沒有@,H不住,下一個input語句會去讀新的一行*/?? ????input?z?@@;????/*兩個@,H住沒問題,有效期延長到Data步下一圈*/?? cards;?? 1?2?3?? 4?5?6?? 7?? ;??
@只能在輸入數據“1 2 3”之后要換行輸入“4 5 6”才能被識別
@@可以無視這個,因為其關注“input xxx”,可以直接在cards;后輸入數據“1 2 3 4 5 6”,系統自動識別為兩組數據
參考百度文庫:
——————————————————————————
兩個都是行控制符(就是SAS閱讀你的數據時,在每一行里面的閱讀數)
@ ?表示執行下一個操作時,指針移到下一個記錄(也就是下一行)。
@@表示執行下一個操作,指針保持在當前記錄(當前行)。
?
舉個例子:(數據錄入我使用兩種方式,以便于看出@與@@的閱讀區別)
?
(1):錄入數據時占用一行的空間
[html]?view plaincopy print?
data?a;?? ??input?x?y?@;(當僅僅使用一個@時)?? ??cards;?? ??1?2?3?4?2?2?3?5?3?2?1?1?(數據占用一行空間)?? ??;run;?? proc?print?data=a;?? run;??
(閱讀結果如下)
data a:?(此時SAS僅僅讀了1次,顯然沒有讀完,就跳到下一行閱讀下一個數據,因為下一行沒有數據可讀,所以就讀了一次就完了)
[html]?view plaincopy print?
The?SAS?System?????17:52?Saturday,?October?27,?2014??23?? ???????????????????????????????????????Obs????x????y?? ????????????????????????????????????????1?????1????2??
[html]?view plaincopy print?
data?b;?? ??input?x?y?@@;?? ??cards;?? ??1?2?3?4?2?2?3?5?3?2?1?1?(數據占用一行空間)?? ??;run;?? proc?print?data=b;?? run;??
(閱讀結果如下)
[html]?view plaincopy print?
data?b(此時SAS讀了6次,顯然這次是正確的,因為使用@@時,數據在當前行連續閱讀)?? ????????????The?SAS?System?????17:52?Saturday,?October?27,?2014??24?? ?????????????????????????????????????????Obs????x????y?? ??????????????????????????????????????????1?????1????2?? ??????????????????????????????????????????2?????3????4?? ??????????????????????????????????????????3?????2????2?? ??????????????????????????????????????????4?????3????5?? ??????????????????????????????????????????5?????3????2?? ??????????????????????????????????????????6?????1????1??
(2):錄入數據時占用多行空間
[html]?view plaincopy print?
data?a;?(當僅僅使用一個@時)?? ??input?x?y?@;?? ??cards;??1?2?3?4?? 2?2?3?5??(數據占用三行空間)?? ?????????3?2?1?1?? ??;run;?? proc?print?data=a;run;??
(SAS閱讀情況如下)
[html]?view plaincopy print?
data?a:(此時SAS僅僅讀了3次,顯然沒有讀完,因為每一行沒有連續讀完,就開始閱讀新下一個數據,也就是光標就跳到了下一行)?? ?????The?SAS?System?????17:52?Saturday,?October?27,?2014??25?? ?????????????????????????????????????????Obs????x????y???????????????????????????????????????????? ??????????????????????????????????????????1?????1????2???????????????????????????????????????????? ??????????????????????????????????????????2?????2????2???????????????????????????????????????????? ??????????????????????????????????????????3?????3????2??????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
??????????????????????????????????????????????????????????????????????????????????????????????????????
[html]?view plaincopy print?
data?b;?? ??input?x?y?@@;?? ??cards;?? ??1?2?3?4?? ??2?2?3?5?? ??3?2?1?1?? ??;run;?? proc?print?data=b;?? run;??
(SAS閱讀情況如下)
[html]?view plaincopy print?
data?b;(此時SAS閱讀了6次,顯然這次閱讀的閱讀時正確的,因為每一行都是連續讀取之后再讀取下一記錄,也就是跳到下一行)?? ???????????The?SAS?System?????17:52?Saturday,?October?27,?2014??26?? ?????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????Obs????x????y???????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????1?????1????2???????????????????????????????????????????? ??????????????????????????????????????????2?????3????4???????????????????????????????????????????? ??????????????????????????????????????????3?????2????2???????????????????????????????????????????? ??????????????????????????????????????????4?????3????5???????????????????????????????????????????? ??????????????????????????????????????????5?????3????2???????????????????????????????????????????? ??????????????????????????????????????????6?????1????1??????????????
——————————————————————————————————————————
三、數據查看方式:content/data/proc sql三種方式
數據查看也有很多方式,譬如content、data/proc sql包括雙擊也是一種方式,一共四種方式。
1、content方式
查詢數據的內容(summary) ?針對一些頭文件里面的隱藏數據集,可以用這樣的方式看到,類似summary,不過內容沒有那么詳細。
[html]?view plaincopy print?
proc?contents?data=fv.forever?out=class;run;??
out代表將查詢內容打印出來,并存放在臨時邏輯庫work之中。
2、data方式
[html]?view plaincopy print?
data?class/view=class1;?? set?fv.forever?? ;?? run;??
3、sql方式
[html]?view plaincopy print?
proc?sql;?? create?view?class2?as?? select*from?fv.forever;?? quit; ?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的SAS学习︱逻辑库、数据集创建与查看、数据库链接(SAS与R的code对照)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。