Mục lục
Cú pháp If-Then-Else
Cú pháp If-Then trong SAS mang ý nghĩa: nếu - thì. Ví dụ về cách sử dụng như sau:
DATA NEW;
SET SASHELP.CARS;
LENGTH COMMENT $20. ;
IF MSRP<=30000 THEN COMMENT="Cheap";
IF MSRP>30000 AND MSRP<=40000 THEN COMMENT="Medium";
IF MSRP>40000 THEN COMMENT="Expensive";
RUN;
Kết quả nhận được như sau:
| MSRP | … | COMMENT |
|---|---|---|
| $36,945 | … | Medium |
| $23,820 | … | Cheap |
| $26,990 | … | Cheap |
| $33,195 | … | Medium |
| $43,755 | … | Expensive |
Chú ý rằng, với việc viết liên tiếp các lệnh if mà các điều kiện có overlap thì lệnh sau sẽ thực hiện đè vào lệnh trước. Ví dụ nếu gõ lệnh:
DATA NEW;
SET SASHELP.CARS;
LENGTH COMMENT $20. ;
IF MSRP>40000 THEN COMMENT="Expensive";
IF MSRP>30000 AND MSRP<=45000 THEN COMMENT="Medium";
RUN;
Thì các giá trị MRSP thuộc khoảng \((40000, 45000]\) vẫn được COMMENT là Medium.
Để giải quyết vấn đề này, ta dùng If-Else. Cách viết như sau:
DATA NEW;
SET SASHELP.CARS;
LENGTH COMMENT $20. ;
IF MSRP<=30000 THEN COMMENT="Cheap";
ELSE IF MSRP<=40000 THEN COMMENT="Medium";
ELSE COMMENT="Expensive";
RUN;
Chú ý rằng, giá trị missing của biến numberic nhỏ hơn tất cả các giá trị (missing <-3, missing <-1000). Do đó, nếu biến có giá trị missing thì có thể bị sai sót. Do đó cần điều chỉnh lại code một chút như sau:
DATA NEW;
SET SASHELP.CARS;
LENGTH COMMENT $20. ;
IF MISSING(MSRP) THEN COMMENT="Missing";
ELSE IF MSRP<=30000 THEN COMMENT="Cheap";
ELSE IF MSRP<=40000 THEN COMMENT="Medium";
ELSE COMMENT="Expensive";
RUN;
Loop
DO TO
Cú pháp loop I từ \(x\) đến \(y\) được thực hiện bằng cú pháp:
DO I = x TO y;
/*Statements*/
END
Ví dụ sau đây loop I qua các giá trị từ 1 đến 10 theo bước nhảy 1 đơn vị (giá trị của I là \(1, 2, 3, …, 10\)):
DATA NEW;
DO I=1 TO 10;
J=I**2;
K=I*2;
OUTPUT;
END;
RUN;
Kết quả như sau:
| I | J | K |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 4 | 4 |
| 3 | 9 | 6 |
| 4 | 16 | 8 |
| 5 | 25 | 10 |
| 6 | 36 | 12 |
| 7 | 49 | 14 |
| 8 | 64 | 16 |
| 9 | 81 | 18 |
| 10 | 100 | 20 |
Có thể chọn bước nhảy giữa các giá trị bằng BY như sau:
DATA NEW;
DO I=1 TO 10 BY 2;
J=I**2;
K=I*2;
OUTPUT;
END;
RUN;
Kết quả như sau:
| I | J | K |
|---|---|---|
| 1 | 1 | 2 |
| 3 | 9 | 6 |
| 5 | 25 | 10 |
| 7 | 49 | 14 |
| 9 | 81 | 18 |
Hoặc loop ngược như sau:
DATA NEW;
DO I=10 TO 1 BY -2;
J=I**2;
K=I*2;
OUTPUT;
END;
RUN;
Loop cũng có thể thực hiện với các giá trị không phải là số nguyên. Khi đó, bước nhảy giữa các giá trị sẽ là 1 đơn vị:
DATA NEW;
DO I=0.5 TO 13.2;
J=I**2;
K=I*2;
OUTPUT;
END;
RUN;
DO WHILE
DO WHILE thực hiện loop trong khi điều kiện ở WHILE vẫn được thỏa mãn. Ví dụ như sau:
DATA NEW;
I=0;
DO WHILE (I<10);
I=I+1;
J=I**2;
K=I*2;
OUTPUT;
END;
RUN;
Kết quả như sau:
| I | J | K |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 4 | 4 |
| 3 | 9 | 6 |
| 4 | 16 | 8 |
| 5 | 25 | 10 |
| 6 | 36 | 12 |
| 7 | 49 | 14 |
| 8 | 64 | 16 |
| 9 | 81 | 18 |
| 10 | 100 | 20 |
DO UNTIL
DO WHILE thực hiện loop cho đến khi điều kiện ở UNTIL được thỏa mãn. Ví dụ như sau:
DATA NEW;
I=0;
DO UNTIL (I>10);
I=I+1;
J=I**2;
K=I*2;
OUTPUT;
END;
RUN;
Kết quả như sau:
| I | J | K |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 4 | 4 |
| 3 | 9 | 6 |
| 4 | 16 | 8 |
| 5 | 25 | 10 |
| 6 | 36 | 12 |
| 7 | 49 | 14 |
| 8 | 64 | 16 |
| 9 | 81 | 18 |
| 10 | 100 | 20 |
| 11 | 121 | 22 |