Mục lục
Proc Print
PROC PRINT
là procedure cơ bản nhất để in ra một dữ liệu. Cú pháp cơ bản của PROC PRINT
như sau:
PROC PRINT DATA=DATA.PRINT_RAW /*OPTIONS*/;
VAR /*VARIALBES TO PRINT*/;
LABEL /*LABEL OF VARIALBES*/;
FORMAT /*FORMAT OF VARIALBES*/;
TITLE /*TITLE OF TABLE*/;
WHERE /*CONDITIONALS*/;
RUN;
Trong đó:
DATA
là dữ liệu cần in.OPTIONS
là các tùy chọn ví dụ số lượng quan sát cần in, tùy chọn về bật/tắt OBS.VAR
là các biến (các cột) sẽ in ra, ngăn cách bởi dấu cách ví dụX1 X2 X3
.LABEL, FORMAT
là nhãn và định dạng của từng biến (từng cột).TITLE
là tiêu đề của bảng. Chú ý có thể sử dụng tùy chọnTITLE
với tất cả các procedure trong SAS.WHERE
chỉ các quan sát thỏa mãn điều kiện này mới có thể in ra.
Các tùy chọn hàng và cột
Ví dụ đơn giản của PROC PRINT
như sau:
PROC PRINT DATA=SASHELP.CARS(FIRSTOBS=1 OBS=10);
RUN;
Chú ý rằng tùy chọn FIRSTOBS=1 OBS=10
để hạn chế số lượng các quan sát in ra. Để chọn các biến (cột) sẽ được in ra, ta dùng lệnh VAR
. Các biến được ngăn cách với nhau bằng dấu cách.
PROC PRINT DATA=SASHELP.CARS (FIRSTOBS=1 OBS=10);
VAR Make Model Type;
RUN;
Để thêm label cho các cột, ta dùng lệnh LABEL
. Chú ý rằng cần thêm tuỳ chọn LABEL
ở phần PROC PRINT
. Cú pháp được ví dụ như sau:
PROC PRINT DATA=SASHELP.CARS(FIRSTOBS=1 OBS=10) LABEL;
VAR Make EngineSize Type;
LABEL Make="Car Maker" EngineSize="Engine Size" Type="Type of cars";
RUN;
Để thêm tiêu đề (title) cho kết quả in ra, ta dùng lệnh TITLE, TITLE2, ...TITLE10
theo thứ tự từ lớn đến nhỏ.
PROC PRINT DATA=SASHELP.CARS(OBS=5) LABEL;
VAR Make EngineSize Type;
LABEL Make="Car Maker" EngineSize="Engine Size" Type="Type of cars";
TITLE "Proc print";
TITLE2 "Learn to use title";
RUN;
Vì khi đặt lệnh TITLE
thì lệnh đó sẽ được nhớ cho các câu lệnh về sau. Do đó, ta có thể reset title bằng lệnh như sau:
PROC PRINT DATA=SASHELP.CARS(OBS=5) LABEL;
VAR Make EngineSize Type;
LABEL Make="Car Maker" EngineSize="Engine Size" Type="Type of cars";
TITLE ;
TITLE2 ;
RUN;
Các tùy chọn định dạng dữ liệu
Để tuỳ chỉnh format cho từng cột, ta dùng lệnh FORMAT
như ví dụ dưới đây:
PROC PRINT DATA=SASHELP.CARS(OBS=5) LABEL;
VAR Make EngineSize Type Weight Cylinders;
LABEL Make="Car Maker" EngineSize="Engine Size" Type="Type of cars";
TITLE "Proc print";
TITLE2 "Learn to use format";
FORMAT Weight NLNUM20. Cylinders PERCENT10.2;
RUN;
Để bỏ cột obs không cần thiết, ta thêm tuỳ chọn NOOBS
. Kết quả của PROC PRINT
được cho như sau:
PROC PRINT DATA=SASHELP.CARS(OBS=5) NOOBS LABEL;
VAR Make EngineSize Type Weight Cylinders;
LABEL Make="Car Maker" EngineSize="Engine Size" Type="Type of cars";
TITLE "Proc print";
TITLE2 "Learn to use format";
FORMAT Weight NLNUM20. Cylinders PERCENT10.2;
RUN;
Chú ý rằng có thể dùng WHERE
trong PROC PRINT
để lọc dữ liệu ngay khi in dữ liệu. Ví dụ sau đây để in dữ liệu chỉ với các quan sát có Type là Sedan.
PROC PRINT DATA=SASHELP.CARS(OBS=5) NOOBS LABEL;
VAR Make EngineSize Type Weight Cylinders;
LABEL Make="Car Maker" EngineSize="Engine Size" Type="Type of cars";
TITLE "Proc print";
TITLE2 "Learn to use format";
WHERE TYPE="SUV";
FORMAT Weight NLNUM20. Cylinders PERCENT10.2;
RUN;
Proc Report
PROC REPORT là phiên bản cao cấp hơn của PROC PRINT
. Các cú pháp chính của PROC REPORT
như sau:
PROC REPORT DATA=PRINT_RAW /*OPTION*/;
COLUMN /*Variables to print*/;
DEFINE /*Variable*/ / /*Option for variable*/;
TITLE /*Title*/;
COMPUTE /*Variable*/;
/*Format based on values of variable*/
ENDCOMP;
RUN;
Trong đó:
OPTION
các lựa chọn về định dạng của bảng (header, column). Ví dụ:
STYLE(HEADER)=[FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE BORDERCOLOR=WHITE];
STYLE(COLUMN)=[BORDERCOLOR=WHITE];
TITLE
Title của bảng.DEFINE
Mỗi biến một dòng. Chứa các thông tin format, label của biến cần in. Ví dụ:
DEFINE BAD / "Bad" DISPLAY FORMAT=NLNUM20.;
COMPUTE/ENDCOMP
Format dòng/ cột dựa trên giá trị của biến. Ví dụ
COMPUTE GRP_FINAL;
IF GRP_FINAL = . THEN
CALL DEFINE
(_ROW_,"STYLE","STYLE={FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE }");
ELSE
CALL DEFINE (_ROW_,"STYLE",PUT(GRP_FINAL,FTM_BINGROUP.));
ENDCOMP;
COLUMN
các cột (biến) sẽ in ra. Sử dụng dấu ngoặc để merge các cột: Ví dụ muốn merge nhiều cột và đặt tên:
COLUMN ("Sample" NUMBER DEFAULT PD_ACTUAL)
Các tùy chọn hàng và cột
Ta đến với một số ví dụ như sau:
PROC REPORT DATA=SASHELP.CARS(FIRSTOBS=1 OBS=10) NOWD
STYLE(HEADER)=[FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE BORDERCOLOR=WHITE]
STYLE(COLUMN)=[BORDERCOLOR=WHITE];
COLUMN MAKE ENGINESIZE TYPE WEIGHT CYLINDERS;
DEFINE MAKE / "Car Maker" DISPLAY;
DEFINE ENGINESIZE / "Engine Size" DISPLAY FORMAT=10.1;
DEFINE TYPE / "Type of cars" DISPLAY;
DEFINE WEIGHT / "Weight" DISPLAY FORMAT=NLNUM20.;
DEFINE CYLINDERS / "Cylinders" DISPLAY ;
TITLE "Proc Report Example";
RUN;
Đoạn code trên cho kết quả tương tự như Proc PRINT
Để gộp (merge) các cột, ta làm như sau:
PROC REPORT DATA=SASHELP.CARS(FIRSTOBS=1 OBS=10) NOWD
STYLE(HEADER)=[FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE BORDERCOLOR=WHITE]
STYLE(COLUMN)=[BORDERCOLOR=WHITE];
COLUMN (MODEL) ("Engine" ENGINESIZE CYLINDERS HORSEPOWER) ("Miles per gallon" MPG_CITY MPG_HIGHWAY) ("Size" WEIGHT WHEELBASE LENGTH);
DEFINE CYLINDERS / "Cylinders" DISPLAY;
DEFINE ENGINESIZE / "Size" DISPLAY FORMAT=10.1;
DEFINE HORSEPOWER / "Horse Power" DISPLAY;
DEFINE MPG_CITY / "City" DISPLAY;
DEFINE MPG_HIGHWAY / "Highway" DISPLAY;
DEFINE WEIGHT / "Weight" DISPLAY FORMAT=NLNUM20.;
DEFINE WHEELBASE / "Wheelbase" DISPLAY FORMAT=NLNUM20.;
DEFINE LENGTH / "Length" DISPLAY FORMAT=NLNUM20.;
TITLE "Proc Report Example";
RUN;
Kết quả nhận được như sau:
Định dạng dữ liệu
Để thay đổi stype (màu sắc, font chữ) của một dòng dựa theo điều kiện, ta làm như sau:
PROC SQL NOPRINT;
CREATE TABLE TEMP00 AS
SELECT MODEL, ENGINESIZE, CYLINDERS, HORSEPOWER
FROM SASHELP.CARS(FIRSTOBS=1 OBS=10);
CREATE TABLE TEMP01 AS
SELECT "Total" AS MODEL, SUM(ENGINESIZE) AS ENGINESIZE, SUM(CYLINDERS) AS CYLINDERS, SUM(HORSEPOWER) AS HORSEPOWER
FROM TEMP00;
INSERT INTO TEMP00 SELECT * FROM TEMP01;
QUIT;
PROC REPORT DATA=TEMP00 NOWD
STYLE(HEADER)=[FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE BORDERCOLOR=WHITE]
STYLE(COLUMN)=[BORDERCOLOR=WHITE];
COLUMN (MODEL) ("Engine" ENGINESIZE CYLINDERS HORSEPOWER);
DEFINE CYLINDERS / "Cylinders" DISPLAY;
DEFINE ENGINESIZE / "Size" DISPLAY FORMAT=10.1;
DEFINE HORSEPOWER / "Horse Power" DISPLAY;
TITLE "Proc Report Example";
COMPUTE MODEL;
IF MODEL = "Total" THEN
CALL DEFINE(_ROW_,"STYLE","STYLE={FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE }");
ENDCOMP;
RUN;
Kết quả như sau:
Ta có thể thay đổi style của một dòng dựa trên điều kiện như sau:
PROC FORMAT;
VALUE FTM_COLOR
LOW - <2='STYLE=[BACKGROUND=CX66BD7D]'
2 - <3='STYLE=[BACKGROUND=CXFEEA8A]'
3 - HIGH='STYLE=[BACKGROUND=CXF66A6E]'
;
RUN;
PROC REPORT DATA=TEMP00 NOWD
STYLE(HEADER)=[FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE BORDERCOLOR=WHITE]
STYLE(COLUMN)=[BORDERCOLOR=WHITE];
COLUMN (MODEL) ("Engine" ENGINESIZE CYLINDERS HORSEPOWER);
DEFINE CYLINDERS / "Cylinders" DISPLAY;
DEFINE ENGINESIZE / "Size" DISPLAY FORMAT=10.1;
DEFINE HORSEPOWER / "Horse Power" DISPLAY;
TITLE "Proc Report Example";
COMPUTE ENGINESIZE;
IF MODEL = "Total" THEN
CALL DEFINE(_ROW_,"STYLE","STYLE={FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE }");
ELSE CALL DEFINE(_ROW_,"STYLE",PUT(ENGINESIZE,FTM_COLOR.));
ENDCOMP;
RUN;
Chú ý rằng, phần proc format để xác định điều kiện. Ví dụ từ low đến 2 sẽ được gán màu xanh, từ 2 đến 3 được gán màu vàng… Kết quả nhận được như sau:
Tương tự, ta có thể thay đổi format của một cell dựa trên điều kiện:
PROC FORMAT;
VALUE FTM_COLOR_CELL
LOW - <2='CX66BD7D'
2 - <3='CXFEEA8A'
3 - HIGH='CXF66A6E'
;
RUN;
PROC REPORT DATA=TEMP00 NOWD
STYLE(HEADER)=[FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE BORDERCOLOR=WHITE]
STYLE(COLUMN)=[BORDERCOLOR=WHITE];
COLUMN (MODEL) ("Engine" ENGINESIZE CYLINDERS HORSEPOWER);
DEFINE CYLINDERS / "Cylinders" DISPLAY;
DEFINE ENGINESIZE / "Size" DISPLAY FORMAT=10.1 STYLE(COLUMN)=COLUMN{BACKGROUND=FTM_COLOR_CELL.};
DEFINE HORSEPOWER / "Horse Power" DISPLAY;
TITLE "Proc Report Example";
COMPUTE MODEL;
IF MODEL = "Total" THEN
CALL DEFINE(_ROW_,"STYLE","STYLE={FONT_WEIGHT=BOLD BACKGROUND=CX159A58 FOREGROUND=WHITE }");
ENDCOMP;
RUN;