![](https://img.51dongshi.com/20250107/wz/18430216452.jpg)
在SAS宏技術(shù)中,宏變量的定義方法多種多樣,常見的有三種:%let、call symput以及select ... into:。這些方法之間最大的區(qū)別在于生成的宏變量類型不同。call symput在宏函數(shù)中定義的宏變量可以在函數(shù)外部調(diào)用,而%let和select ... into:生成的是局部宏變量,若要在宏函數(shù)外部使用,必須事先使用%global聲明變量類型。以下是一個示例,展示如何使用call symput來在宏函數(shù)中生成可外部調(diào)用的宏變量:%macro test();data _NULL_;call symput('Today',put(today(),date9.));run;%mend;%test;%put &Today;以上代碼中,Today變量在宏函數(shù)test中通過call symput生成,并可以在宏函數(shù)外部通過%put調(diào)用。接下來,展示如何使用%let來生成局部宏變量:%macro test();%let today=%sysfunc(today(),date9.);%mend;%test;%put &today;在這個示例中,today變量在宏函數(shù)test內(nèi)部生成,因此在外部無法直接調(diào)用。若需在外部使用,需在宏函數(shù)內(nèi)部使用%global聲明變量類型。最后,展示使用select ... into:生成局部宏變量的示例:%macro test();data todaydate;date=today();proc sql noprint;select put(date,date9.) INTO: today from todaydate ;quit;%put &today;%mend;%test;%put &today;在上述代碼中,today變量同樣是在宏函數(shù)內(nèi)部生成,且僅在內(nèi)部可用。若需在外部使用,也需通過%global聲明變量類型。