Thao tác với các biến

Cách thức xử lý các loại biến trong SAS

Mục lục

Thao tác với biến số (numeric)

Các biến mới trong SAS được tạo ra đơn giản bằng cách tính toán thông qua các biến khác.

/*-----NUMBERIC VARIABLES----*/
DATA TEST;
  SET SASHELP.CARS (KEEP=Make EngineSize Weight Cylinders Horsepower);
  ATTRIB HP_PER_CYLIN FORMAT=PERCENT10.2 LABEL="HP per Cylinders";
  HP_PER_CYLIN=Horsepower/Cylinders;
RUN;
Make Type Cylinder Weight HP_PER_CYLIN
Acura SUV 6 4451 4416.67%
Acura Sedan 4 2778 5000.00%
Acura Sedan 4 3230 5000.00%
Acura Sedan 6 3575 4500.00%
Acura Sedan 6 3880 3750.00%

Các hàm thường sử dụng với biến số như sau:

Hàm Ý nghĩa
SUM(X, Y) Tổng của \(x\) và \(y\) (coi missing bằng 0)
+ -  * / Cộng, trừ, nhân, chia
** Mũ (ví dụ 2**3 nghĩa là \(2^3\))
SQRT(X) Căn của x (\(\sqrt{x}\))
EXP(X) Mũ cơ số e (\(e^x\))
LOG(X) Logrit cơ số e (\(\ln(x)\))
ROUND(X, 0.001) Làm tròn X đến 3 chữ số sau dấu phảy

Giá trị missing của biến chữ được hiển thị là dấu chấm (.). Để thao tác với giá trị missing ta làm như sau:

DATA DS_OUTPUT;
  SET DS_INPUT;
  IF VAR1=. THEN VAR1=0;
RUN;

Thao tác với biến chữ (categorical)

Tạo biến chữ mới

Tương tự với biến số, biến chữ được tạo ra bằng cách tính toán thông qua các biến khác. Tuy nhiên, khi tạo biến chữ cần chú ý độ dài của biến. Ví dụ sau đây trả ra kết quả không như mong muốn:

DATA TEST;
  SET SASHELP.CARS (KEEP=Make Model Type Origin DriveTrain Horsepower);
  IF Horsepower<165 THEN COMMENT="WEAK";
  ELSE IF Horsepower<255 THEN COMMENT="MEDIUM";
  ELSE COMMENT="STRONG"; 
RUN;
Make Model Type Origin DriveTrain Horsepower COMMENT
Acura MDX SUV Asia All 265 STRO
Acura RSX Type S 2dr Sedan Asia Front 200 MEDI
Acura TSX 4dr Sedan Asia Front 200 MEDI
Acura TL 4dr Sedan Asia Front 270 STRO
Acura 3.5 RL 4dr Sedan Asia Front 225 MEDI

Nguyên nhân là do biến COMMENT mới được tạo được phần mềm SAS hiểu nhầm là biến có độ dài bằng 4 (bằng độ dài chữ ‘WEAK’). Do đó với các giá trị dài hơn thì biến COMMENT sẽ không hiển thị đầy đủ. Các làm là xác định độ dài cho biến COMMENT trước như sau:

DATA TEST;
  SET SASHELP.CARS (KEEP=Make Model Type Origin DriveTrain Horsepower);
  ATTRIB COMMENT FORMAT=$20. LABEL="Comment for Horse power";
  IF Horsepower<165 THEN COMMENT="WEAK";
  ELSE IF Horsepower<255 THEN COMMENT="MEDIUM";
  ELSE COMMENT="STRONG"; 
RUN;
Make Model Type Origin DriveTrain Horsepower COMMENT
Acura MDX SUV Asia All 265 STRONG
Acura RSX Type S 2dr Sedan Asia Front 200 MEDIUM
Acura TSX 4dr Sedan Asia Front 200 MEDIUM
Acura TL 4dr Sedan Asia Front 270 STRONG
Acura 3.5 RL 4dr Sedan Asia Front 225 MEDIUM

Nối các biến

Để nối các biến, ta có các tuỳ chọn như sau:

  • Dùng || để nối các biến.
  • Dùng CAT để nối các biến.
  • Dùng CATS
  • Dùng CATX
DATA TEST;
  SET SASHELP.CARS (KEEP=Make Model Type Origin DriveTrain);
  ATTRIB DETAIL FORMAT=$100. LABEL="Detail Information";
  DETAIL=CAT(MODEL, " from ", MAKE, " is ", TYPE);
RUN;
Make Model Type Origin DriveTrain DETAIL
Acura MDX SUV Asia All MDX from Acura is SUV
Acura RSX Type S 2dr Sedan Asia Front RSX Type S 2dr from Acura is Sedan
Acura TSX 4dr Sedan Asia Front TSX 4dr from Acura is Sedan
Acura TL 4dr Sedan Asia Front TL 4dr from Acura is Sedan
Acura 3.5 RL 4dr Sedan Asia Front 3.5 RL 4dr from Acura is Sedan

Substring

Để trích xuất một phần của biến chữ, ta dùng hàm SUBSTR. Cú pháp như sau: SUBSTR(VARIABLE, LOCATION, LENGTH). Trong đó:

  • VARIABLE là biến cần trích xuất.
  • LOCATION là vị trí đầu tiên của sẽ trích xuất (từ trái qua phải).
  • LENGTH là độ dài sẽ trích xuất.
DATA TEST;
  LENGTH STRING $20.;
  STRING='SAS programming'; OUTPUT;
  STRING='Credit risk modeling'; OUTPUT;
RUN;

DATA TEST;
  SET TEST;
  S1=SUBSTR(STRING, 1, 10);
RUN;
STRING S1
SAS programming SAS progra
Credit risk modeling Credit ris

Để trích xuất 10 ký tự cuối cùng của chuỗi, ta kết hợp với hàm LENGTH (trả về độ dài của chuỗi).

DATA TEST;
  LENGTH STRING $20.;
  STRING='SAS programming'; OUTPUT;
  STRING='Credit risk modeling'; OUTPUT;
RUN;

DATA TEST;
  SET TEST;
  S1=SUBSTR(STRING, LENGTH(STRING)-9, 10);
RUN;
STRING S1
SAS programming rogramming
Credit risk modeling k modeling

Một số hàm khác để xử lý biến chữ

Một số hàm thường dùng để xử lý biến chữ như sau:

  • UPCASE Viết hoa biến.
  • COMPRESS Xoá các dấu trắng của biến.
DATA TEST;
  LENGTH STRING $20.;
  STRING='SAS programming'; OUTPUT;
  STRING='Credit risk modeling'; OUTPUT;
RUN;

DATA TEST;
  SET TEST;
  S1=UPCASE(STRING);
  S2=COMPRESS(STRING);
  S3="This is "||STRING;
RUN;
STRING S1 S2 S3
SAS programming SAS PROGRAMMING SASprogramming This is SAS programming
Credit risk modeling CREDIT RISK MODELING Creditriskmodeling This is Credit risk modeling

Thao tác với biến ngày tháng (date time)

Nhập biến ngày tháng

Cách nhập biến ngày tháng trong SAS như sau:

	DATA TEST;
		FORMAT BIRTH_DATE YYMMDD10.;
		BIRTH_DATE='21SEP1994'D; OUTPUT;
		BIRTH_DATE='25APR1993'D; OUTPUT;
	RUN;
BIRTH_DATE
1994−09−21
1993−04−25

Trong một số trường hợp, dữ liệu đầu vào có biến ngày tháng mà được viết dưới dạng text. Khi đó để tính toán chính xác, ta cần chuyển thành dạng ngày tháng.

DATA TEST;
  FORMAT ORIGINAL $20.;
  ORIGINAL='1994-09-21'; OUTPUT;
  ORIGINAL='1993-04-25'; OUTPUT;
RUN;

DATA NEW;
  SET TEST;
  FORMAT BIRTH_DATE YYMMDD10.;
  BIRTH_DATE=INPUT(ORIGINAL, YYMMDD10.);
RUN;
ORIGINAL BIRTH_DATE
1994−09−21 1994−09−21
1993−04−25 1993−04−25

Tính toán với biến ngày tháng:

Để xử lý các biến ngày tháng, ta hay dùng các hàm thông dụng như sau:

  • YEAR, MONTH, DATE trả về năm, tháng, ngày của biến ngày tháng.
  • TODAY() trả về ngày hiện tại.
  • INTNX Tăng biến ngày tháng lên một khoảng thời gian nhất định.
  • INTCK trả về khoảng thời gian giữa hai biến ngày tháng.
DATA NEW2;
  SET NEW;
  FORMAT TODAY YYMMDD10. NEXT_YEAR YYMMDD10.;
  YEARMONTH=YEAR(BIRTH_DATE)*100+MONTH(BIRTH_DATE);
  TODAY=TODAY();
  AGE=INTCK('YEAR', BIRTH_DATE, TODAY);
  AGE2=INTCK('DAY', BIRTH_DATE, TODAY)/365.25;
  NEXT_YEAR=INTNX('YEAR', TODAY, 1, 'SAME');
RUN;
ORIGINAL BIRTH_DATE TODAY NEXT_YEAR YEARMONTH AGE
1993−01−08 1993−01−08 2020-12-09 2021-12-09 199301 27
1994−09−21 1994−09−21 2020-12-09 2021-12-09 199409 26
1993−04−25 1993−04−25 2020-12-09 2021-12-09 199303 27

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