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
keepvớ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
keepvớ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
dropvớ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
dropvớ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,wherecó 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ệnhdeletechỉ đượ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;