SAS的語法規律有哪些?

時間 2021-05-30 16:47:35

1樓:

我想知道巨集裡面為什麼用keep &a &b; 保留a,b代替的變數會被sas說syntax error,被當成&符號處理

2樓:大象

SAS的語法其實很簡單,SAS是一種面向過程的語言,其有兩個主要部分構成:Statements 和 Options。

1.Statement

Statements就是SAS中的語句,是SAS程式的主幹,主要告訴SAS需要進行哪些操作,用分號 ';' 結尾。而Statements由SAS關鍵字,SAS名稱,特殊符號和運算子構成。

例如 DATA a; 就是乙個DATA Statement。DATA就是乙個sas關鍵字,a就是乙個sas名稱。又比如 length x $10.

; 就是乙個length Statement,x是乙個sas名稱,'$'和'.'是特殊符號。

函式是SAS Statement的一種特殊組成部分,能接收輸入,並返回輸出。函式名稱後面跟著小括號,小括號裡面的引數用逗號分隔開。例如 x = substr(y,1,10);這個Statement由名稱x,賦值運算子= 和substr函式組成,其中y,1和10都是函式的引數。

A SAS statement is a string of SAS keywords, SAS names, special characters, and operators that instructs SAS to perform an operation or that gives information to SAS. Each SAS statement ends with a semicolon.

SAS 9.3 Statement References

2. Options

Options就是SAS中的選項,用來修飾Statements,主要告訴SAS怎樣進行這些操作。options根據修飾的物件不同,其語法不相同,但多個option存在時,之間都用空格分隔。

1. 當options修飾SAS資料集時,用小括號把options框起來。

2.當options修飾SAS關鍵字的時候,則只用空格將options與主幹分隔。

3. 在Proc步驟中,除了Proc statement以外,其他修飾statement的options則需要用反斜槓'/'與主幹分隔開。

例如:Data a(where = (x = 2));這個語句由主幹 Data a和選項where = (x = 2)組成。其中where = (x = 2)修飾SAS名稱:

資料集名a,所以用括號括起來。

Infile x dlm=',' dsd missover;這個語句主幹是Infile x ,dlm=『,』 dsd 和missover都是修飾infile的選項。因此滿足情況2.

model y = x1 x2 x3/ stb vif; 是從屬於Proc Statement的model statement,stb和vif都是修飾這個model的options,與主幹用'/'分隔開,但內部用空格分隔。

注意:單獨的where x = 2;是where statements,不是options。options一定是要有修飾物件的。

附:一些特殊符號

1. 點號'.'。

SAS中的點號。主要會出現在三個地方:邏輯庫.資料集、SAS Format和巨集變數中,主要起到分隔的作用。例如$10. 表示的是$10這樣乙個Format名稱。

又如%let a = mylib; data &a..mydataset; 第乙個.代表分隔巨集變數&a 和後面的.

mydataset,而第二個.則是邏輯庫.資料集裡面的分隔符。

data &&a&i...mydataset; 這裡三個點的前兩點分別表示表示分隔巨集變數&&a&i 和 &ai。

2. 逗號','。

逗號用來分隔引數。比如函式的引數和巨集的引數。此外,在SQL中,由於SQL語言本身的特性,逗號也用來分隔變數。

比如select *, x1 as var1, x2 as var2 from mylib.mydataset; 就是乙個select Statement。其中變數名用逗號分隔。

3. Trail 符號 『@』。

SAS 中的@是指標控制符。用來規定指標的位置,@numerical expression的話,就是把指標移動到該expression所指向的位置。如果@在input語句末尾,則代表將指標停留在資料行的末尾直到執行下乙個input語句。

如果是@@在input語句末尾,則代表將指標停留在資料行的末尾直到執行下乙個data步。

3. 井號 『#』。

換行符號,制定指標讀取的行數。

4. 引號。

分為單引號和雙引號,其中單引號內部的巨集不解析,雙引號內部的巨集要解析。此外,單引號用在在call symput和call symget語句中定義巨集變數。

5. 百分號%。

用來定義巨集語句,%開頭的語句有優先編譯權。

例如%let x = 2;

data a;

%if &x = 2 %then %do;

var1 = 1;

%end;

run;

先編譯%開頭的語句得到

data a;

var1 = 1;

run;

然後在編譯這段程式。

6. Ambersand 號『&』。

用來引用巨集變數,可以巢狀。

7. 分號 ';'。

用來分隔Statements, 每乙個statement有且只有乙個;。

8. 冒號 ':'。

這個出現的地方就比較多了。常見在input語句裡面,用來修飾Format,比如$10. 會定義乙個長度為10的字串,如果檔案中的字串長度不到10,那就把分隔符也當做字串的一部分往後讀,直到讀完10個長度。:

$10.則避免了這個問題。有時候在SQL裡面也會看到,select into語句中,用在定義的巨集變數名稱前。

還有其他的作用可以參考這個文章:

如何零基礎自學SAS? - 大象的回答

有哪些學習屈折語時內化語法規則的突破方法?

肖深刻的九叔 謝題主邀。是的,懂 理解語法規則 不等於會 在真實情境能表達出來 必須要進行訓練。可以進行 聽說訓練 Hren und Sprechen 當代大學德語 德語專業教材 和 新標準德語強化教程 德國原版教材 這兩套教材前幾個級別都含有一冊聽說訓練的冊子。聽說訓練其實主要是在聽和說中進行成分...

SAS入門書籍有哪些值得推薦?

寧靜致遠往事隨風 我零基礎入門,看了一些教材的感想 1.入門推薦馮國雙老師的 小白學SAS 和 The SAS Little Book 簡單易懂 2.有一點基礎了,推薦谷鴻秋老師的 SAS程式設計演義 可以對SAS有乙個整體的學習和思路 3.上手統計,推薦馮國雙老師的 醫學案例統計分析與SAS應用 ...

Python 有哪些糟糕的語法?

a b 向下取整完全可以用int a b 實現,不如直接把 做成和其他語言裡 一樣的功能 比如 很多語言裡 23 10 2但是Python裡 23 10 3 李之瀚 不常用的,你用不好的都不算糟糕,只能說你不會用不得要領。個人認為有點糟糕的,懂得人自然懂我在說什麼 type 較之 isinstanc...