2)錯誤SAS程序通常將執行錯誤標記為醒目的紅色字母。妳可能忘記了分號,拼錯了字母,按錯了鍵盤,壹個小錯誤就會使整個程序無法運行。當妳看到紅色部分和額外的黑色部分時,不要灰心。
3)SAS數據集也稱為表,觀察值也稱為行,變量也稱為列。
4)字符變量的缺失值用空格表示,數值變量的缺失值用句點(。).
5)命名變量和數據集時,請遵循以下規則:
該名稱的長度應為32個字節或更少。
。以字母或下劃線開頭。
。可以包含字母、數字或下劃線,而不是% $!*@。
。可以是小寫或大寫字母,不區分大小寫。
6)SAS程序有兩個基本模塊:數據步驟和過程步驟。
典型的SAS程序從按數據步驟創建SAS數據集開始,然後按流程步驟分析數據。下面是壹個示例:在數據步驟中,米被轉換為公裏,結果在流程步驟中輸出。
數據步驟
數據距離;
英裏數= 26.22;
公裏= 1.61 *英裏;
繼續步驟
過程打印數據=距離;
跑步;
數據步驟和流程步驟由語句組成(廢話),壹個流程少則1條語句,多則數百條語句。初學者經常犯混淆兩種過程語句的錯誤。只要他們記住數據步驟負責讀取和修改數據,而流程步驟負責分析數據、輸出報告和實用函數,他們就不會出錯。
數據步驟以數據語句開始:數據+數據名稱。在上述示例中,數據步驟處理名為distance的數據。為了讀取外部數據和原始數據,數據步驟提供了DO循環、IF-THEN/ELSE以及壹些數字和字符函數。數據步驟還可以按照您想要的方式合並數據集,包括串聯和匹配合並。
流程步驟以proc語句開始:proc+流程名稱(print,sort,means…),SAS流程步驟可以處理從數據存儲和輸出到差異分析和3D圖表的所有內容。
典型的程序從數據語句開始,輸入或修改數據,然後將數據傳遞給PROC語句。但是您不必使用這種模式來混合數據和proc語句。您可以按任意順序排列數據和過程的順序,壹個程序甚至可以只有數據語句或過程語句。
以下是data語句和proc語句之間的壹些基本區別:
數據步驟
以數據語句開始
讀取和修改數據
創建SAS數據集
繼續步驟
以PROC語句開始
執行特定的分析或功能
產生結果或報告
7)數據步驟以逐行、壹個觀察值和壹個觀察值的順序執行。
很容易理解數據步驟是“逐行執行”的。然而,許多新手仍然容易在這裏犯錯誤,例如在創建變量之前使用變量。如果Z變量是由兩個變量X和Y組合而成的新變量,那麽有必要確保創建Z變量的語句在創建X和Y變量的語句之後。
而“觀察值的執行”就不那麽容易理解了。這意味著SAS首先讀取壹個觀察,然後對這個觀察執行data step的所有語句(當然是逐行執行),然後讀取第二個觀察並執行它。SAS的每次執行只有壹次觀察。
8)SAS讀取數據的方法主要有以下幾種:
直接輸入;
從原始數據文件創建SAS數據集;
將其他軟件中的數據文件轉換為SAS數據集;
。直接讀取其他軟件的數據集;
9)內部原始數據
如果數據直接輸入到SAS程序中,則該數據是SAS內部數據。DATALINES表示SAS後面是數據行,直到分號結束,它可以開始壹個新行或跟隨數據。
10)外部原始數據
當數據在SAS程序之外時,INFILE語句用於告訴SAS外部數據的文件名和存儲路徑,它在data語句之後,INPUT語句之前。INFILE後面的文件名和路徑都要加引號,各種系統的引用方式不同:
windows:INFILE“C:\ Mydir \ president . dat“;
UNIX:INFILE“/home/mydir/president . dat“;
OpenVMS:INFILE“【username . mydir】president . dat“;
OS/390或z/OS INFILE‘MYID。predi den . DAT‘;
11)SAS日誌
讀取外部數據時,SAS日誌會提供壹些有用的信息。檢查這些信息可以解決壹些問題,例如將INFILE語句讀取的記錄數與數據集中的實際觀察值進行比較,並確定SAS是否正確讀取了數據。
12)記錄過長
在某些操作環境中,SAS假設外部數據文件的記錄長度為256或更少(記錄長度是指壹行中的字符數,包括空格)。如果長度太長,SAS無法讀取所有內容。此時,需要在INFILE語句中使用LRECL=來指定長度,該長度必須是數據中最長壹行的長度,例如:
INFILE‘c:\ MyRawData \ president . dat‘lrecl = 2000;
您可以通過SAS日誌查看最大記錄長度。
13)輸入語句是數據步驟的壹部分,它告訴SAS如何讀取原始數據。用List input編寫input語句:在INPUT關鍵字後列出變量名(根據變量在文件中出現的順序)。變量名少於32字節(含32字節),只能包含字母、下劃線和數據,並且必須以字母或下劃線開頭。如果變量是字符串,後跟要價符號“$”,則值之間至少有壹個空格,語句應以分號結束。例如:輸入姓名$年齡身高
這意味著輸入了三個變量,其中name是字符串,age和height是數值變量。
14)列輸入讀取以固定列排列的原始數據。
當某些原始數據的值之間沒有空格時,或者當缺少的值沒有用句點替換時,不能使用列表輸入。
但是當每個變量的值出現在數據行的相同位置,並且變量值是字符串或標準值(僅包括數據、小數點、符號和科學標記的e)時。逗號和日期不能算),可以用列輸入來讀。
與列表輸入相比,列輸入具有以下優點:
變量值之間不需要空格;
缺少的值可以直接用空格替換;
的;字符串可以包含空格;
您可以跳過不必要的變量。
列輸入的input語句的格式如下:input關鍵字後接變量名,後接變量的列位置(列位置是字符或數值在壹行中的位置)。“空格+$”仍應在字符串變量名後使用,變量名仍應由空格分隔。例子如下:
輸入姓名$ 1-10年齡11-13身高14-18;
該語句顯示姓名變量占據了該行的第壹列和第十列,這是壹個字符串變量,年齡占據了11-13列,這是壹個數值變量,身高占據了14-18列,這是壹個數值變量。
15)信息系統讀取非標準格式的原始數據。
有時原始數據不全是字符串或數值,例如包含逗號的字符串值(如1,00,001)無法被計算機讀取。其他數據如美元符號、十六進制和壓縮十進制都是非標準數據。在SAS中,信息可以用來告訴計算機如何讀取這些值。
日期是最常見的非標準數據。SAS informats會將類似10-31-2003或31OCT03的數字轉換為日期的起點是1960 1,即這壹天的數字是0。
信息的三種常見格式是:字符串、數值和日期。這三種格式的形式如下:
字符$ informatw。
數字信息d
日期信息。
$是字符串,表示信息(如日期的MMDDYY),w是寬度,d是小數位數,最後是句點“。”。如果沒有句點,SAS將采用以下形式(如MMDDYY)作為變量名。簡單格式化輸入的簡單輸入語句如下:
輸入名稱$10。三歲。身高5.1出生日期MMDDYY10。;
Name為字符串變量,占用10寬度,即列位置為1-10;
年齡是壹個數值變量,占據三個寬度,列位置範圍為11-13;
Height是壹個數字變量,占用五種寬度,包括作為小數點的1和小數點本身,列位置從14到18(例如150.3)。
最後,日期變量從19列開始,采用MMDDYY的形式。
16)混合閱讀模式
每種數據讀取方法都有其優點,list是最簡單的,column和formatted都很復雜但不要求變量之間有空格,並且變量名可以包含變量,而formatted可以讀取日期等特殊數據。SAS允許您靈活匹配不同的閱讀方法,以實現最大的便利性。
有許多方法可以讀取數據,下面的過程就是其中之壹:
數據國家;
INFILE“C:\ MYrawdata \ park . dat“;
輸入park name $ 1-22 STATE $ Year @ 40 areas coma 9。;
PROC打印數據=國家;
標題“選擇國家公園”;
跑步;
其中,以列模式讀取ParkName,以列表模式讀取州和年份,以格式化模式讀取面積。
有時,混合讀取方法會遇到問題:SAS通過用指示器標記位置來讀取壹行原始數據,但每種讀取方法對指示器的使用略有不同。列表模式下,SAS自動找到非空白區域並開始讀取;在列模式下,SAS讀取您指定的特定位置;信息化模式下,SAS忽略指標標準,只是依次讀取。此時,將需要列指示符@n來人為地使SAS讀數直接跳轉到壹列。
17)讀取雜亂的原始數據。
有些數據排列混亂,長度不壹。這種數據需要新的工具來處理:@‘字符‘列指示符和冒號修飾符。
2.9中提到的@“字符”列指示符允許SAS直接從列中讀取數據。但是有時您不知道要讀取的數據從哪壹列開始。這時,妳只需要知道要讀取的數據前面的字符或單詞。例如,有壹個關於狗的原始文件,妳想讀取狗的品種編號,但文件排列混亂,只知道品種編號跟在品種壹詞後面,那麽妳可以通過以下方式讀取:輸入@‘品種:‘dog Breed $;
冒號修飾符由於輸入讀取字符串變量默認為8個字符,因此在上面的示例中,如果dogbreed名稱超過8個字符,則需要定義長度,該長度定義為$length,並且空格包含在該長度中。如果您想在SAS讀取過程中遇到空格時停止讀取,您應該在$length前添加壹個冒號“:”。例如,原始數據中有這樣壹行:
示例網絡日誌是雜亂數據的壹個很好的例子。以下是壹個網站的網絡日誌。數據以訪問IP開始,然後是訪問日期、訪問文件名和其他信息。
現在我想讀取訪問日期和被訪問的文件名,但是它們在每行中所占的列的位置是不同的,並且每行中文件名的長度也是不同的,因此SAS以下列方式讀取該文件:
數據博客:
INFILE“c:\ dog weblogs . txt“;
輸入@‘【‘訪問日期日期11。@“獲取”文件:20美元。;
PROC打印數據=網絡日誌;
標題“狗狗護理網絡日誌”;
跑步;
作為列指示符,@‘【‘告訴SAS在【】之後讀取內容,@‘GET‘告訴SAS在GET之後讀取內容。因為文件名是字符串變量,這裏基本會超過8個字節,所以追加$20。
18)跨行觀測值的讀取方法
通常,原始文件中的壹行代表壹個觀察值,有時觀察值會越過該行。由於SAS將自動轉到下壹行讀取數據,直到所有觀察到的變量(在輸入語句中給出)都被讀取,因此您需要告訴SAS何時不要換行,以便SAS-got-to-a-new-line的暫停描述不會出現在日誌中。此時,您需要在輸入語句中添加壹個行指示符。()
行指示符,斜杠/:告訴SAS跳到原始數據的第二行;#n:跳到第n行,其中n表示原始數據中某個觀察的行數(#2使SAS跳到某個觀察的第二行),#n不能來回跳轉。
例如,有壹組關於溫度的數據。temperature.dat的第壹條線代表城市和州,第二條線代表今天的最高溫度和最低溫度,第三條線代表歷史上的最高溫度和最低溫度。
諾姆阿克
55 44
88 29
按照以下程度讀取該數據:
數據highlow
INFILE“c:\ myrawdata \ temperature . dat“;
輸入城市$州$
NormalLow高NormalLow低
# 3 RecordHigh RecordLow
PROC打印數據= highlow
標題“七月的高溫和低溫”;
跑步;
輸入後,告訴SAS讀取第壹行的城市變量和州變量,並斜杠/告訴SAS移動到下壹行的第壹列,以便讀取normalhigh和normallow。#3告訴SAS移動到第三行的第壹列,以便繼續讀取觀察值的recordhigh變量和recordlow變量。這裏/妳可以用#2代替#3。
19)當壹行中出現多個觀察值時,可以在輸入語句的末尾添加壹個停止符號@ @。
20)讀取原始數據的壹些觀察值。
當SAS讀取壹行觀測值時,它首先讀取足夠的變量來決定是否有必要保留這壹行的觀測值。然後在輸入語句的末尾添加符號@,這被稱為尾隨at(稱為尾隨at),它告訴SAS先保持這壹行,同時使用IF語句檢查觀察值是否滿足需要。如果是這樣,您可以使用輸入語句來讀取現有變量。
@ vs @@@類似於@ @,兩者都是行保持說明符。區別在於他們停留的時間長短。@可以讓SAS停留到下壹個輸入語句(不換行),@ @可以讓停留時間轉到下壹個數據步驟。