日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAS入门 (二)--宏

發布時間:2023/12/31 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAS入门 (二)--宏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SAS宏功能
將一個變量,一段程序或者一個文本命名,供以后調用,是用于擴充和制做用戶化SAS系統的工具;利用宏功能用戶可以減少在完成一些共同任務時必須輸入的文本量。當用戶在某個SAS程序中使用宏功能時,這個宏功能產生所需要的SAS語句和命名,SAS系統的其余部份接受這些語句和命令。

  • 獲取SAS的系統信息。SAS在啟動時就創建了一些自動宏變量,用以存儲當前SAS進程啟動的日期,時間,版本號及其它信息,用戶可以在任何情況下使用這些宏變量。
  • 有條件的執行數據步和過程步。例如每天提交一份生產情況的詳細報告,每周五增加一份匯總報告。使用宏功能每天運行同一個程序就可以實現上述任務。
  • 開發交互式系統。使用SAS宏語言的%WINDOW語句及一些基本的編程語句可開發交互式用戶界面。
  • 產生與數據無關的SAS程序,但可展示與數據相關的結果。宏功能可保持SAS程序的獨立性和移植性。一段程序在多種情況下均可運行,得到期望的結果。
  • 在不同的SAS數據步和過程步之間傳遞數據。SAS宏變量可在SAS的任何地方被引用,具有全局性,所以成為不同過程間傳遞數據最方便的手段。
  • 重復執行SAS程序碼。凡用到SAS宏語言的變量和語言成分,都以符號%或&開始。當SAS程序提交后,在編譯階段,系統對程序逐詞掃描過程中,凡遇到%或&開始的詞,就啟動宏語言處理器對此進行處理。

宏變量

宏變量屬于SAS宏語言,但不同于DATA步變量。可以在SAS程序除數據行之外的任何地方定義并使用宏變量。一個DATA步變量僅與一個SAS數據集有聯系,而宏變量不依賴于SAS數據集。宏變量與數據步中變量的主要區別是,數據步中變量的值往往與被處理觀測有關,而宏變量有唯一確定的值,一個宏變量存放的值保持不變直到被修改。
宏變量具有唯一確定的值,可以存儲字符串,是全局變量。可以在數據步中被引用,但不能在數據步中用賦值語句定義。引用時,在變量名前加“&”號,引用效果是變量值代替變量名。宏變量在引用時放在單引號之間不會被解讀,只能在雙引號之間。

SAS系統包含兩種類型的宏變量:
- 自動宏變量,由SAS系統提供;
- 用戶定義的宏變量,由用戶在程序中定義。

自動宏變量
在SAS進程開始時,或程序運行過程中由系統自動創建,在SAS退出前一直保持有效,是全局宏變量,能在SAS任何地方被引用。以下是一些主要的自動宏變量:
SYSDATE SAS進程開始的日期;
SYSDATE9 以Date9.格式顯示SAS進程開始的日期;
SYSTIME SAS進程開始的時間;
SYSSCP 使用的操作系統;
SYSDAY SAS進程開始是為星期幾;
SYSVER SAS的版本;
SYSLAST 最新創建的SAS數據集的名字;

定義宏變量
有兩種方式定義宏變量:%LET和call symput。定義宏變量并分配一個值給宏變量的最簡單方法是使用宏程序語句%LET。格式如下:
%LET 變量名=變量值;
另一個語句就是call symput,其格式如下:
call symput(變量名,變量值);

%let print=%str(proc print;run;);data score; input math@@; cards; 71 81 91 ; run; %let exa=score; data temp; set &exa; if math>80; run; &print

宏變量的引用
為了引用一個宏變量的值,放一個&號在宏變量名字的前面
模式&name成為宏變量的引用。用戶創建宏變量之后,可以在SAS程序中引用它。
%let exa=score;
title “display of student &exa”;
宏處理器用宏變量EXA的值替代&exa,SAS系統看到的是下面的TITLE語句:
title “display of student score”;
用戶根據SAS程序中的需要可以多次引用宏變量。宏變量的值保持不變直到其被修改。
每次出現引用&exa,宏處理器用score替代它

在上例中,如果用戶想要改變SAS數據集名字,可以在它出現的這段程序中通過改變宏變量的值來實現

%let exa=study.math;data temp; set &exa; if math>80; run;proc print; title "display of student &exa"; run;

宏變量的特殊用法

  • %STR 將一段程序賦給一個宏變量. %STR(SAS程序)

%let print = %str(proc print seashell.class;run;);

若賦值給宏變量的值浮腫含有引號,要加百分號處理
例如:

%let text = Paul%’s Report;

  • %eval(表達式)
    在 計算表達式的值,再將結果賦給宏變量
%let m=2; %let value = %eval(&m+8); % put &value
  • %sysfunc 使用數據步函數(例如 substr\scan\trim\leet)
    %sysfunc(數據步函數名(自變量),<輸出格式>)
%let curdate=%sysfunc(today(),word date.) %let fmt2=%sysfunc(time(),time5.)


宏是一個被存貯的文本,用一個名字識別它。最簡單的宏就像一個宏變量一樣工作,但復雜的宏可以完成許多宏變量不能做的事。定義宏的語句格式為:
%MACRO 宏名稱;
宏文本
%MEND <宏名稱>;(默認存放在work.sasmacr中);
%MACRO語句是每一個宏的開始,同時必須給出這個宏的名字。宏名字的命名準則與SAS名字一樣。宏的文本也就是宏的內容,宏內的字符串稱為固定文本或模型文本,該文本將變為用戶SAS程序的一部分。%MEND語句必須圍住每個宏并表示宏的介紹。%MEND語句也可以放上宏名字來說明該宏已結束。

宏的調用
為了調用一個宏,放一個百分數符號(%)在宏名字前面就可以了,比如:%study
模式“%宏名稱”稱為宏的調用。當用戶定義一個宏之后,可以在SAS程序中調用它,如:
Title “Display of school %study”;
宏處理器執行宏STUDY,把宏里面的固定文本替代到TITLE語句中。TITLE語句變為:
Title “Display of school Student score”;

data sashelp.class; input a b; cards; 31 76 76 92 62 37 ; run; %macro printClass(class);proc print data=&class;run; %mend printClass; %printClass(sashelp.class)

SAS程序可以包括任意多個宏,且在一個程序中可以多次調用一個宏。對于簡單文本的闡明,使用宏變量比定義一個宏更有效。然而,當任務比較復雜時,宏比宏變量更有優勢。
把宏變量和宏結合在一起,將給出一種用宏工具編程的強有力的方法。下面我們將介紹在宏中使用宏變量的多種方法

data score; input math phy Eng; cards; 87 67 87 78 96 84 95 69 65 ; run; %macro data; data temp; set score; run; %mend data; %macro plot;proc plot;plot &math*&phy;run; %mend plot; %macro link(math,phy); %data %plot %mend link; %let exa=score; %let xvar=math; %let yvar=phys; %let plot=%str(proc plot;plot &xvar*&yvar;run;);data score; input math phys@@; cards; 91 81 98 65 70 92 ; run;data temp; set &exa; run;&plot

宏參數
可以定義宏變量作為%macro語句的一部分,如:
%macro printClass(class);
proc print data=&class;
run;
%mend printClass;
被定義在一個%macro語句括號內的宏變量稱為宏參數。當調用這個宏時只要給出這些參數的值, %printClass(sashelp.class)
宏處理器把第一個值給第一個宏變量名字,第二個值給第二個宏變量名字,以此類推(因此這些參數也稱為位置參數)。以上這個宏執行后生成下面語句:
proc print data=sashelp.class; run;

對參數分配的值只在這個宏執行過程中有效。因此第二次調用宏時,還是要給出參數的值。宏參數是局部宏變量的一個例子。而宏變量是從用戶創建它們直到SAS作業或SAS會話結束都存在;故前面介紹的宏變量為全局宏變量。
使用參數有以下幾個優點:
用戶可以少寫幾個%LET語句;
調用宏時不需要知道這些參數的名字,只需要提供這些值的類型;
使用參數可以保證該變量在宏之外的程序部份不會被引用。


宏的條件結構

%if 條件 %then 語句;

%if 條件 %then %do;語句組; %end; %else %do;語句組; %end;

例如:

%macro link(judge, math,phy);title; %if judge=yes %then %do; %data;title 'data for plot'; %end; %plot; %mend link;

宏的循環結構

宏的循環語句有三種類型,分別是
宏中DO循環語句的格式為:

%do 指標變量=始點 %to 終點(BY 增量);
文本或宏程序語句;
%end;

%do %while(表達式); /先判斷再執行/
文本;
%end;

%do %until(表達式); /先執行再判斷/
文本;
%end;

%macro create (name, number); %do n=1 %to &number;&name.n %end; %mend create; data %create(abc,3); input a@@; if a=1 then output abc1; else if a=2 then output abc2; else if a=3 then output abc3; cards; 1 2 3 ; proc print data=abc1; run; proc print data=abc2; run; proc print data=abc3; run;

總結

以上是生活随笔為你收集整理的SAS入门 (二)--宏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。