Mục lục
Giữ lại các cột
Có hai cách để giữ lại các cột trong Data Step.
- Sử dụng
keep
với dữ liệu input: Cách này được ưu tiên sử dụng do chương trình sẽ chỉ đọc các cột cần thiết từ data đầu vào - Sử dụng
keep
với dữ liệu ouput: Cách này chậm hơn cách trước do chương trình sẽ đọc toàn bộ các cột từ data đầu vào, sau đó giữ lại các cột cần thiết.
Cách thứ nhất
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
RUN;
Cách thứ hai
DATA TEST;
SET SASHELP.CARS;
KEEP Make EngineSize Type Weight Cylinders;
RUN;
Cách thứ hai (cách viết khác)
DATA TEST (KEEP Make EngineSize Type Weight Cylinders);
SET SASHELP.CARS;
RUN;
Kết quả nhận được như sau:
Make | Type | EngineSize | Cylinder | Weight |
---|---|---|---|---|
Acura | SUV | 3.5 | 6 | 4451 |
Acura | Sedan | 2.0 | 4 | 2778 |
Acura | Sedan | 2.4 | 4 | 3230 |
Acura | Sedan | 3.2 | 6 | 3575 |
Acura | Sedan | 3.5 | 6 | 3880 |
Xoá các cột
Tương tự như giữ các cột, ta có hai cách để xoá các cột:
- Sử dụng
drop
với dữ liệu input: Cách này được ưu tiên sử dụng do chương trình sẽ chỉ đọc các cột cần thiết từ data đầu vào - Sử dụng
drop
với dữ liệu output: Cách này chậm hơn cách trước do chương trình sẽ đọc toàn bộ các cột từ data đầu vào, sau đó xoá đi các cột không cần thiết.
Ví dụ
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
DROP EngineSize;
RUN;
Make | Type | Cylinder | Weight |
---|---|---|---|
Acura | SUV | 6 | 4451 |
Acura | Sedan | 4 | 2778 |
Acura | Sedan | 4 | 3230 |
Acura | Sedan | 6 | 3575 |
Acura | Sedan | 6 | 3880 |
Đổi tên cột
Để đổi tên cột, ta dùng lệnh rename
. Ta có thể dùng lênh rename
với cả dữ liệu input hoặc output.
Ví dụ 1
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
RENAME EngineSize=Kich_thuoc_dong_co;
RUN;
Ví dụ 2
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders RENAME=(EngineSize=Kich_thuoc_dong_co));
RUN;
Make | Type | Kich_thuoc_dong_co | Cylinder | Weight |
---|---|---|---|---|
Acura | SUV | 3.5 | 6 | 4451 |
Acura | Sedan | 2.0 | 4 | 2778 |
Acura | Sedan | 2.4 | 4 | 3230 |
Acura | Sedan | 3.2 | 6 | 3575 |
Acura | Sedan | 3.5 | 6 | 3880 |
Chú ý: Trong trường hợp dữ liệu đầu vào chứa biến được đặt tên không theo chuẩn (có dấu cách, ký tự đặc biệt). Ta sử dụng cú pháp sau đây để đổi tên biến về dạng chuẩn:
DATA NEW;
SET OLD;
RENAME 'VAR OLD'n=VAR_NEW;
RUN;
Xoá theo dòng
Để xoá các dòng, ta có hai cách là sử dụng delete
và where
:
-
Dùng
where
để giữ lại các dòng thoả mãn một số điều kiện cho trước. Thương tự các phần trên,where
có hai cách dùng. Ưu và nhược điểm của hai cách này tương tự với chú ý ở phía trên.- Dùng trong ngoặc ở data input. Chú ý cách viết ở ví dụ phần 2.1.
- Dùng ngoài ngoặc ở data output.
-
Dùng
delete
để xoá các dòng thoả mãn một số điều kiện cho trước. Lệnhdelete
chỉ được dùng ở data đầu ra.
Cú pháp sử dụng lệnh where
được mô tả như sau:
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
WHERE TYPE='SUV';
RUN;
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders WHERE=(TYPE='SUV'));
RUN;
Cách sử dụng lệnh delete
được mô tả như sau:
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
IF TYPE NOT='SUV' THEN DELETE;
RUN;
Make | Type | EngineSize | Cylinder | Weight |
---|---|---|---|---|
Acura | SUV | 3.5 | 6 | 4451 |
BMW | SUV | 4.0 | 6 | 4023 |
BMW | SUV | 4.4 | 8 | 4824 |
Buick | SUV | 4.2 | 6 | 4600 |
Buick | SUV | 3.4 | 6 | 4024 |
Output nhiều dữ liệu
Mục này nói đến cách thức để output nhiều data từ một data đầu vào trong cùng một câu lệnh. Nghĩa là thay vì phải viết nhiều câu lệnh để output nhiều data thì ta có thể viết một cách ngắn gọn nhất. Ví dụ sau đây là cách viết không tối ưu:
DATA SEDAN;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
WHERE TYPE='Sedan';
RUN;
DATA SUV;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
WHERE TYPE='SUV';
RUN;
Make | Type | EngineSize | Cylinder | Weight |
---|---|---|---|---|
Acura | SUV | 3.5 | 6 | 4451 |
BMW | SUV | 4.0 | 6 | 4023 |
BMW | SUV | 4.4 | 8 | 4824 |
Buick | SUV | 4.2 | 6 | 4600 |
Buick | SUV | 3.4 | 6 | 4024 |
Để output nhiều dữ liệu một cách tối ưu, ta dùng lệnh output
như sau:
DATA SUV SEDAN;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
IF TYPE='SUV' THEN OUTPUT SUV;
ELSE IF TYPE='Sedan' THEN OUTPUT SEDAN;
RUN;
Một số lưu ý khác
Trong các data của SAS có một biến ẩn để đánh số thứ tự các dòng có tên là _N_
. Biến này không xuất hiện trong data như có thể gọi ra bằng cách như sau:
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
STT=_N_;
RUN;
Make | Type | Cylinder | Weight | STT |
---|---|---|---|---|
Acura | SUV | 6 | 4451 | 1 |
Acura | Sedan | 4 | 2778 | 2 |
Acura | Sedan | 4 | 3230 | 3 |
Acura | Sedan | 6 | 3575 | 4 |
Acura | Sedan | 6 | 3880 | 5 |
Biến ẩn _N_
có thể sử dụng trong một số tường hợp như sau. Ví dụ sau đây có ý nghĩa là: Giữ lại 100 dòng đầu tiên của bảng.
DATA TEST;
SET SASHELP.CARS (KEEP=Make EngineSize Type Weight Cylinders);
IF _N_>100 THEN DELETE;
RUN;