SAS學習︱邏輯庫、資料集建立與檢視、資料庫連結(SAS與R的code對照)
每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~
———————————————————————————
入門學習一週,開始寫學習筆記。用習慣R之後,發現SAS程式相對python R還是有點繁雜。但是業務需要,不得不學一下。
程式碼部分大多來源於姚志勇老師的《SAS程式設計與資料探勘商業案例》。
——————————————————————————————————————————
一、邏輯庫、資料集、資料字典
資料字典>邏輯庫>資料集
邏輯庫=工作空間,儲存四類內容,test是資料集檔案,views是檢視(相當於R裡面的views點選檢視),formats代表檔案,sasmacr代表目錄內容。
資料集,包括資料檔案+SAS檢視,可以像R中雙擊獲取資料結構圖表,不過這樣效率較低,可以使用其他方法,譬如資料字典的方式describe view,詳細內容見三、資料檢視。
資料字典,是當年程序中所有內容的邏輯庫、資料表的一個平鋪、列出來。所以,在全域性檢索上十分有效。我覺得這個非常有用,不過貌似網上對其的定義比較少。
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”。
libname lb clear; #刪除
代表刪除libname2、關於資料字典
訪問資料字典方法如下:
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 |
/*資料字典把當前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步都可以訪問。如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、資料庫外部接入
/*#資料庫,外部接入*/
libname hsdb db2 user=xxuser password="xxxx" datasrc=datadb;
/* #在邏輯庫hsdb中,db2代表資料庫名稱,datasrc代表SQL中的資料集名稱*/
還有RODBC訪問。
/*通過RODBC訪問 需要設定很多內容*/
libname odb odbc user=*** password=*** datasrc=test;
libname hsdb odbc noprompt="uid=xxxuser;pwd=xxxxx;dsn=datadb;" schema=hsuser
2、外部匯入,spss資料
/*SPSS資料集,外部接入*/
libname sps spss '';
3、oracle資料集,外部接入
/*oracle資料集,外部接入*/
libname oralib oracle user=xxx pw=xxx path dbmssrv schema=educ;
4、input方式匯入資料
input裡面有很多小符號,譬如@@ 和@的區別,$&。不過,也正是這些符號,讓我覺得... 導個數據也忒費勁了...不過,這個也是資料輸入中最複雜的問題了。。
關鍵就在這指標問題上,
@代表指標還在這行,只能罩著下一個input,如果沒有兩個input,那麼跟沒有@一樣,直接跳到下一行;接下來一個有,則相當於指標在這行;
@@代表指標一直在同一行;
沒有@,代表指標跳到下一行。
"$",表示字元型變數,&代表數值型。
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):錄入資料時佔用一行的空間
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次,顯然沒有讀完,就跳到下一行閱讀下一個資料,因為下一行沒有資料可讀,所以就讀了一次就完了)
The SAS System 17:52 Saturday, October 27, 2014 23
Obs x y
1 1 2
data b;
input x y @@;
cards;
1 2 3 4 2 2 3 5 3 2 1 1 (資料佔用一行空間)
;run;
proc print data=b;
run;
(閱讀結果如下)
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):錄入資料時佔用多行空間
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閱讀情況如下)
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
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閱讀情況如下)
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,不過內容沒有那麼詳細。
proc contents data=fv.forever out=class;run;
out代表將查詢內容打印出來,並存放在臨時邏輯庫work之中。
2、data方式
data class/view=class1;
set fv.forever
;
run;
3、sql方式
proc sql;
create view class2 as
select*from fv.forever;
quit;
每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~
———————————————————————————