Mục lục
Trước hết, ta sẽ tạo dữ liệu dummy như sau:
DATA OLD;
ARRAY WIDTH{6};
ARRAY HEIGHT{6};
DO I=1 TO 100;
DO J=1 TO 6;
WIDTH{J}= RAND('NORMAL', 5, 5);
HEIGHT{J} = RAND('NORMAL', 5, 5);
END;
OUTPUT;
END;
DROP I J;
RUN;
WIDTH1 | WIDTH2 | WIDTH3 | WIDTH4 | … | HEIGHT3 | HEIGHT4 | HEIGHT5 | HEIGHT6 |
---|---|---|---|---|---|---|---|---|
23.907 | 9.744 | 20.407 | 14.863 | … | 16.753 | 15.579 | 19.537 | 12.071 |
13.334 | 15.167 | 12.749 | 11.794 | … | 13.657 | 18.993 | 15.1 | 6.593 |
21.634 | 16.704 | 13.736 | 22.898 | … | 18.835 | 11.681 | 13.257 | 5.817 |
13.032 | 1.859 | 22.652 | 8.278 | … | 23.622 | 6.896 | 15.276 | 18.14 |
18.088 | 16.164 | 17.558 | 14.974 | … | 18.869 | 14.706 | 19.07 | 19.154 |
Giả sử ta muốn tính diện tích với hai kích thước đã biết trước, ta làm như sau:
DATA NEW;
SET OLD;
AREA1=WIDTH1*HEIGHT1;
AREA2=WIDTH2*HEIGHT2;
AREA3=WIDTH3*HEIGHT3;
AREA4=WIDTH4*HEIGHT4;
AREA5=WIDTH5*HEIGHT5;
AREA6=WIDTH6*HEIGHT6;
RUN;
Cách xử lý như trên dễ bị sai sót do cần phải viết nhiều dòng lệnh cho các biến có cấu trúc tương tự nhau. Để giải quyết vấn đề, ta sẽ sử dụng Array trong SAS như sau:
DATA NEW;
SET OLD;
ARRAY W{6} WIDTH:;
ARRAY H{6} HEIGHT:;
ARRAY A{6} AREA1-AREA6;
DO I=1 TO 6;
A{I}=W{I}*H{I};
END;
RUN;
Khởi tạo array
Để khởi tạo array, ta có các cách như sau:
DATA NEW;
SET OLD;
ARRAY A{10};
RUN;
Cú pháp như trên sẽ tạo ra các biến có tên A1, A2, …, A10. Chú ý số 10 trong A{10}
nghĩa là độ dài của array. Trong sas, các array được đếm từ số 1. Ta cũng có thể làm như sau:
DATA NEW;
SET OLD;
ARRAY A{10} AREA1-AREA10;
RUN;
Nếu các biến AREA1, AREA2, …, AREA10 không có sẵn trong dữ liệu thì câu lệnh trên sẽ tạo ra các biến AREA1, AREA2, …, AREA10 tương ứng với phần tử của array A{1}, A{2},..., A{10}
.
Các array có thể là array tạm (nghĩa là không xuất hiện ở dữ liệu đầu ra). Array tạm sẽ làm chương trình xử lý nhanh hơn.
DATA NEW;
SET OLD;
ARRAY A{10} _TEMPORARY_;
RUN;
Tạo array với các biến có sẵn
Tạo array với các biến có cùng cấu trúc tên
DATA NEW;
SET OLD;
ARRAY A{10} VAR1-VAR10;
RUN;
Trong đó, VAR1, VAR2, …, VAR10 là các biến đã có sẵn trong dữ liệu OLD. Lúc này, biến VAR1 có thể được gọi bằng A{1}, VAR2 có thể được gọi bằng A{2}, … Lưu ý rằng có thể không cần khai báo độ dài của array như sau:
DATA NEW;
SET OLD;
ARRAY A{*} VAR1-VAR10;
RUN;
Tạo array với các loại biến đặc biệt
Để tại array chứa toàn bộ các biến numeric/ character, ta làm như sau:
DATA NEW;
SET OLD;
ARRAY NUM{*} _NUMERIC_;
ARRAY CAT{*} _CHARACTER_;
ARRAY ALL{*} _ALL_;
RUN;
Với lệnh trên, array NUM sẽ chứa toàn bộ các biến có định dạng numberic và array CAT sẽ chứa toàn bộ các biến có định dạng character. Tương tự như vậy array ALL sẽ chứa toàn bộ các biến trong dữ liệu.
Để tạo array với các biến bắt đầu bằng ký tự đặc biệt, ta làm như sau:
DATA NEW;
SET OLD;
ARRAY A{*} VAR:;
RUN;
Với cú pháp như trên, tất cả các biến có tên bắt đầu bằng VAR sẽ được chứa vào array A. Các biến này có thể tên là VAR1, VARA, VAR_B, … không nhất thiết phải theo sau bằng số. Lưu ý rằng, các biến được gán vào array theo thứ tự xuất hiện ở dữ liệu. Như ví dụ trên, VAR1 là A{1}, VARA là A{2}, …
Tính toán với array
Để tính toán với array, ta sử dụng số chỉ vị trí. Với ví dụ ban đầu, ta xử lý bằng Array như sau:
DATA NEW;
SET OLD;
ARRAY AREA{6} ;
ARRAY W{6} WIDTH1-WIDTH6;
ARRAY H{6} HEIGHT1-HEIGHT6;
DO I=1 TO 6;
AREA{I}=W{I}*H{I};
END;
RUN;
Có thể làm cách khác như sau (nếu các biến WIDTH, HEIGHT đã được xếp theo thứ tự từ 1 đến 6).
DATA NEW;
SET OLD;
ARRAY W{*} WIDTH:;
ARRAY H{*} HEIGHT:;
N=DIM(H);
ARRAY AREA{N} ;
DO I=1 TO N;
A{I}=W{I}*H{I};
END;
RUN;
Chú ý rằng cú pháp DIM{A}
trả về độ dài của array A.
Ví dụ sau đây thay thế giá trị missing trong tất cả các biến numeric bằng 0
DATA NEW;
SET OLD;
ARRAY A{*} _NUMERIC_;
DO I=1 TO DIM(OF A);
IF A{I}=. THEN A{I}=0;
END;
RUN;
Các hàm với array
SAS cung cấp các hàm sau đây để tính toán các chỉ số thống kê của Array. Chú ý rằng các hàm này bỏ qua giá trị missing trong các phần của của array.
SUM(OF A{*})
tổng các phần của các phần tử của array A.MAX(OF A{*}), MIN(OF A{*}), MEAN(OF A{*}), VAR(OF A{*})
giá trị lớn nhất, nhỏ nhất, trung bình, variance của các phần tử của array A.CMISS(OF A{*})
số lượng phần tử missing của array A.RANGE(OF A{*})
chênh lệch giữa giá trị lớn nhất và giá trị nhỏ nhất của các phần tử trong array A (MAX(OF A{*})-MIN(OF A{*})
).