SAS - Macro

SAS có một tính năng lập trình mạnh mẽ được gọi là Macrosđiều này cho phép chúng tôi tránh các phần mã lặp đi lặp lại và sử dụng chúng lặp đi lặp lại khi cần thiết. Nó cũng giúp tạo các biến động trong mã có thể nhận các giá trị khác nhau cho các phiên bản chạy khác nhau của cùng một mã. Macro cũng có thể được khai báo cho các khối mã sẽ được sử dụng lại nhiều lần theo cách tương tự như các biến macro. Chúng ta sẽ thấy cả hai điều này trong các ví dụ dưới đây.

Biến vĩ mô

Đây là những biến giữ một giá trị được sử dụng nhiều lần bởi một chương trình SAS. Chúng được khai báo ở phần đầu của chương trình SAS và được gọi sau đó trong phần nội dung của chương trình. Chúng có thể là Toàn cầu hoặc Địa phương trong phạm vi.

Biến Macro toàn cục

Chúng được gọi là các biến vĩ mô toàn cục vì chúng có thể được truy cập bởi bất kỳ chương trình SAS nào có sẵn trong môi trường SAS. Nói chung, chúng là các biến được gán hệ thống được nhiều chương trình truy cập. Một ví dụ chung là ngày hệ thống.

Thí dụ

Dưới đây là một ví dụ về biến SAS được gọi là SYSDATE đại diện cho ngày hệ thống. Hãy xem xét một kịch bản để in ngày hệ thống trong tiêu đề của báo cáo SAS mỗi ngày báo cáo được tạo. Tiêu đề sẽ hiển thị ngày và ngày hiện tại mà chúng tôi không cần mã hóa bất kỳ giá trị nào cho chúng. Chúng tôi sử dụng tập dữ liệu SAS tích hợp có tên CARS có sẵn trong thư viện SASHELP.

proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

Khi đoạn mã trên được chạy, chúng ta nhận được kết quả sau.

Biến Macro cục bộ

Các biến này có thể được truy cập bởi các chương trình SAS trong đó chúng được khai báo như một phần của chương trình. Chúng thường được sử dụng để cung cấp các varaibel khác nhau cho cùng một câu lệnh SAS mà chúng có thể xử lý các quan sát khác nhau của một tập dữ liệu.

Cú pháp

Các biến cục bộ được gắn với cú pháp dưới đây.

% LET (Macro Variable Name) = Value;

Ở đây trường Giá trị có thể nhận bất kỳ giá trị số, văn bản hoặc ngày tháng nào theo yêu cầu của chương trình. Tên biến Macro là bất kỳ biến SAS hợp lệ nào.

Thí dụ

Các biến được sử dụng bởi các câu lệnh SAS bằng cách sử dụng & ký tự được nối ở đầu tên biến. Chương trình dưới đây cho chúng ta quan sát tất cả về kiểu dáng 'Audi' và loại 'Thể thao'. Trong trường hợp chúng tôi muốn kết quả củadifferent make, chúng ta cần thay đổi giá trị của biến make_namemà không thay đổi bất kỳ phần nào khác của chương trình. Trong trường hợp mang chương trình, biến này có thể được tham chiếu lặp lại trong bất kỳ câu lệnh SAS nào.

%LET make_name = 'Audi';
%LET type_name = 'Sports';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

Khi đoạn mã trên được chạy, chúng ta nhận được kết quả tương tự như chương trình trước đó. Nhưng hãy thay đổitype name đến 'Wagon'và chạy cùng một chương trình. Chúng tôi sẽ nhận được kết quả dưới đây.

Chương trình Macro

Macro là một nhóm các câu lệnh SAS được gọi bằng một cái tên và để sử dụng nó trong chương trình ở bất kỳ đâu, bằng cách sử dụng tên đó. Nó bắt đầu bằng câu lệnh% MACRO và kết thúc bằng câu lệnh% MEND.

Cú pháp

Các biến cục bộ được khai báo với cú pháp dưới đây.

# Creating a Macro program.
%MACRO <macro name>(Param1, Param2,….Paramn);

Macro Statements;

%MEND;

# Calling a Macro program.
%MacroName (Value1, Value2,…..Valuen);

Thí dụ

Chương trình dưới đây mô tả một nhóm các sao chép SAT dưới một macro có tên 'show_result'; Macro này đang được gọi bởi các câu lệnh SAS khác.

%MACRO show_result(make_ , type_);
proc print data = sashelp.cars;
where make = "&make_" and type = "&type_" ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
%MEND;

%show_result(BMW,SUV);

Khi đoạn mã trên được chạy, chúng ta nhận được kết quả sau.

Macro thường được sử dụng

SAS có nhiều câu lệnh MACRO được tích hợp sẵn trong ngôn ngữ lập trình SAS. Chúng được sử dụng bởi các chương trình SAS khác mà không cần khai báo rõ ràng. Ví dụ phổ biến là - kết thúc chương trình khi một số điều kiện được đáp ứng hoặc nắm bắt giá trị thời gian chạy của một biến trong nhật ký chương trình. Dưới đây là một số ví dụ.

Macro% PUT

Câu lệnh macro này ghi văn bản hoặc thông tin biến macro vào nhật ký SAS. Trong ví dụ dưới đây, giá trị của biến 'hôm nay' được ghi vào nhật ký chương trình.

data _null_;
CALL SYMPUT ('today',
TRIM(PUT("&sysdate"d,worddate22.)));
run;
%put &today;

Khi đoạn mã trên được chạy, chúng ta nhận được kết quả sau.

Macro% RETURN

Việc thực thi macro này gây ra sự kết thúc bình thường của macro hiện đang thực thi khi điều kiện nhất định được đánh giá là đúng. Trong ví dụ dưới đây, khi giá trị của biến"val" trở thành 10, macro kết thúc nếu nó tiếp tục.

%macro check_condition(val);
   %if &val = 10 %then %return;

   data p;
      x = 34.2;
   run;  

%mend check_condition;  

%check_condition(11)  ;

Khi đoạn mã trên được chạy, chúng ta nhận được kết quả sau.

Macro% END

Định nghĩa macro này chứa một %DO %WHILEvòng lặp kết thúc, theo yêu cầu, bằng câu lệnh% END. Trong ví dụ dưới đây, kiểm tra có tên macro nhận đầu vào của người dùng và chạy vòng lặp DO sử dụng giá trị đầu vào này. Kết thúc của vòng lặp DO đạt được thông qua câu lệnh% end trong khi phần cuối của macro đạt được thông qua câu lệnh% mend.

%macro test(finish);
   %let i = 1;
   %do %while (&i <&finish);
      %put the value of i is &i;
      %let i=%eval(&i+1);
   %end;
%mend test;
%test(5)

Khi đoạn mã trên được chạy, chúng ta nhận được kết quả sau.