SAS - มาโคร

SAS มีคุณสมบัติการเขียนโปรแกรมที่มีประสิทธิภาพที่เรียกว่า Macrosซึ่งช่วยให้เราหลีกเลี่ยงส่วนที่ซ้ำซากของโค้ดและใช้ซ้ำแล้วซ้ำอีกเมื่อจำเป็น นอกจากนี้ยังช่วยสร้างตัวแปรแบบไดนามิกภายในโค้ดที่สามารถรับค่าที่แตกต่างกันสำหรับอินสแตนซ์การรันที่แตกต่างกันของโค้ดเดียวกัน นอกจากนี้ยังสามารถประกาศมาโครสำหรับบล็อกโค้ดซึ่งจะถูกนำมาใช้ซ้ำหลายครั้งในลักษณะเดียวกันกับตัวแปรมาโคร เราจะเห็นทั้งสองอย่างนี้ในตัวอย่างด้านล่าง

ตัวแปรมาโคร

นี่คือตัวแปรที่เก็บค่าไว้เพื่อใช้ซ้ำแล้วซ้ำอีกโดยโปรแกรม SAS จะมีการประกาศเมื่อเริ่มต้นโปรแกรม SAS และจะถูกเรียกออกในภายหลังในเนื้อหาของโปรแกรม สามารถเป็น Global หรือ Local ในขอบเขตได้

ตัวแปร Global Macro

เรียกว่าตัวแปรมาโครส่วนกลางเนื่องจากสามารถเข้าถึงได้โดยโปรแกรม SAS ที่มีอยู่ในสภาพแวดล้อม SAS โดยทั่วไปเป็นตัวแปรที่ระบบกำหนดให้ซึ่งเข้าถึงได้โดยหลายโปรแกรม ตัวอย่างทั่วไปคือวันที่ของระบบ

ตัวอย่าง

ด้านล่างนี้เป็นตัวอย่างของตัวแปร SAS ที่เรียกว่า SYSDATE ซึ่งแสดงถึงวันที่ของระบบ พิจารณาสถานการณ์จำลองเพื่อพิมพ์วันที่ของระบบในชื่อของรายงาน SAS ทุกวันที่สร้างรายงาน ชื่อเรื่องจะแสดงวันที่และวันปัจจุบันโดยที่เราไม่ได้เข้ารหัสค่าใด ๆ ให้ เราใช้ชุดข้อมูล SAS ในตัวที่เรียกว่า CARS ที่มีอยู่ในไลบรารี SASHELP

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

เมื่อรันโค้ดด้านบนเราจะได้ผลลัพธ์ต่อไปนี้

ตัวแปร Local Macro

ตัวแปรเหล่านี้สามารถเข้าถึงได้โดยโปรแกรม SAS ซึ่งมีการประกาศให้เป็นส่วนหนึ่งของโปรแกรม โดยทั่วไปจะใช้เพื่อจัดหา varaibels ที่แตกต่างกันให้กับคำสั่ง SAS sl เดียวกันซึ่งสามารถประมวลผลข้อสังเกตที่แตกต่างกันของชุดข้อมูลได้

ไวยากรณ์

ตัวแปรโลคัลถูกทำลายด้วยไวยากรณ์ด้านล่าง

% LET (Macro Variable Name) = Value;

ที่นี่ช่อง Value สามารถรับค่าตัวเลขข้อความหรือวันที่ตามที่โปรแกรมต้องการ ชื่อตัวแปรมาโครคือตัวแปร SAS ที่ถูกต้อง

ตัวอย่าง

ตัวแปรถูกใช้โดยคำสั่ง SAS โดยใช้ & อักขระต่อท้ายชื่อตัวแปร โปรแกรมด้านล่างนี้ทำให้เราทุกคนสังเกตเห็นรถยนต์ 'Audi' และประเภท 'Sports' ในกรณีที่เราต้องการผลลัพธ์ของdifferent makeเราจำเป็นต้องเปลี่ยนค่าของตัวแปร make_nameโดยไม่ต้องเปลี่ยนส่วนอื่น ๆ ของโปรแกรม ในกรณีของโปรแกรมนำตัวแปรนี้สามารถอ้างอิงซ้ำแล้วซ้ำอีกในคำสั่ง SAS ใด ๆ

%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;

เมื่อรันโค้ดด้านบนเราจะได้ผลลัพธ์เดียวกันกับโปรแกรมก่อนหน้า แต่เรามาเปลี่ยนไฟล์type name ถึง 'Wagon'และรันโปรแกรมเดียวกัน เราจะได้ผลลัพธ์ด้านล่าง

โปรแกรมมาโคร

มาโครคือกลุ่มของคำสั่ง SAS ที่อ้างถึงด้วยชื่อและใช้ในโปรแกรมได้ทุกที่โดยใช้ชื่อนั้น เริ่มต้นด้วยคำสั่ง% MACRO และลงท้ายด้วยคำสั่ง% MEND

ไวยากรณ์

ตัวแปรท้องถิ่นถูกประกาศด้วยไวยากรณ์ด้านล่าง

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

Macro Statements;

%MEND;

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

ตัวอย่าง

โปรแกรมด้านล่างนี้เป็นกลุ่มของ SAT staemnets ภายใต้มาโครที่ชื่อ 'show_result'; มาโครนี้ถูกเรียกโดยคำสั่ง SAS อื่น

%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);

เมื่อรันโค้ดด้านบนเราจะได้ผลลัพธ์ต่อไปนี้

มาโครที่ใช้กันทั่วไป

SAS มีคำสั่ง MACRO จำนวนมากซึ่งสร้างขึ้นในภาษาโปรแกรม SAS โปรแกรมเหล่านี้ถูกใช้โดยโปรแกรม SAS อื่น ๆ โดยไม่ได้ประกาศอย่างชัดเจนตัวอย่างทั่วไปคือ - การยุติโปรแกรมเมื่อตรงตามเงื่อนไขบางประการหรือจับค่ารันไทม์ของตัวแปรในบันทึกโปรแกรม ด้านล่างนี้คือตัวอย่างบางส่วน

มาโคร% PUT

คำสั่งแมโครนี้เขียนข้อความหรือข้อมูลตัวแปรแมโครไปยังบันทึก SAS ในตัวอย่างด้านล่างค่าของตัวแปร "today" ถูกเขียนลงในบันทึกของโปรแกรม

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

เมื่อรันโค้ดด้านบนเราจะได้ผลลัพธ์ต่อไปนี้

ผลตอบแทนมาโคร%

การดำเนินการของมาโครนี้ทำให้แมโครที่กำลังดำเนินการสิ้นสุดตามปกติเมื่อเงื่อนไขบางอย่างประเมินว่าเป็นจริง ในตัวอย่างด้านล่างเมื่อค่าของตัวแปร"val" กลายเป็น 10 มาโครจะยุติมิฉะนั้นจะเกิดขึ้น

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

   data p;
      x = 34.2;
   run;  

%mend check_condition;  

%check_condition(11)  ;

เมื่อรันโค้ดด้านบนเราจะได้ผลลัพธ์ต่อไปนี้

มาโคร% END

นิยามมาโครนี้ประกอบด้วยไฟล์ %DO %WHILEลูปที่สิ้นสุดตามต้องการด้วยคำสั่ง% END ในตัวอย่างด้านล่างแมโครที่มีชื่อว่า test รับอินพุตของผู้ใช้และรัน DO loop โดยใช้ค่าอินพุตนี้ การสิ้นสุดของลูป DO ทำได้โดยใช้คำสั่ง% end ในขณะที่การสิ้นสุดของมาโครทำได้โดยใช้คำสั่ง% 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)

เมื่อรันโค้ดด้านบนเราจะได้ผลลัพธ์ต่อไปนี้