Cú pháp IF - THEN và Loop

Cách thực hiện If-then và loop trong Data step

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

Related Docs

Overview
Data Step
Data Aggregation
Data Visualization
Proc SQL
Variable Analysis
Macro
Model Regression
Variable Selection
Model Assessment