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 |