簡體   English   中英

Proc SQL宏變量未解析

[英]Proc SQL macro variable not resolved

我通常在沒有任何宏變量的情況下通常首先編寫proc SQl,它可以工作,現在我想將其轉換為宏,但是它不起作用,您能看到問題出在哪里嗎?

%macro macrova(LIB=, DATA=);

proc sql noprint;

/*creating an in memory variable with all char variables from the dataset*/

        select name into :names separated by ' '
        from dictionary.columns where libname="&lib" and memname="&data" and type='char'; 

/*to make sure we have the same order of the variables an in-memory variable ORDER is created*/

        SELECT NAME INTO: ORDER SEPARATED BY ' '
        from sashelp.vcolumn where LIBNAME= "&lib" and memname="&datA" ; 

quit;

%MEND;

OPTIONS MLOGIC SYMBOLGEN;
%macrova(LIB=SASHELP,DATA=CLASS)


%PUT &NAMES;
%PUT ℴ 

日志:

55   %PUT &NAMES;
WARNING: Apparent symbolic reference NAMES not resolved.
&NAMES
56   %PUT ℴ
WARNING: Apparent symbolic reference ORDER not resolved.
&ORDER

您需要在調用宏之前定義宏變量,或者在宏中添加%GLOBAL語句。 否則,宏變量將被創建為局部變量,並在宏退出時消失。

請注意,在dictionary.columns中沒有名為ORDER變量,我假設您打算使用VARNUM變量。

同樣,也不需要運行兩個查詢來生成兩個宏變量。

%macro macrova(LIB=, DATA=);
%global names order ;
proc sql noprint;
select name
     , varnum
  into :names separated by ' '
     , :order separated by ' '
from dictionary.columns 
where libname=%upcase("&lib")
  and memname=%upcase("&data")
  and type='char'
order by 2
; 
quit;
%mend macrova;

%macrova(LIB=SASHELP,DATA=CLASS)
%put &NAMES;
%put ℴ

名稱在宏內部被創建為LOCAL值,在宏外部無法使用。 嘗試添加

%global NAMES ORDER;

SELECT語句之前的宏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM