Thao tác với cột và dòng

Cách thức xử lý dữ liệu liên quan đến cột và dòng

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 deletewhere:

  • 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ệnh delete 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;
	

Related Docs

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