gpt4 book ai didi

sas - 如何使用宏中的 SYSPBUFF 通过变量列表屏蔽 "OR"

转载 作者:行者123 更新时间:2023-12-01 23:37:50 24 4
gpt4 key购买 nike

我正在使用 SYSPBUFF 将各种数量的参数传递到宏中。具体来说,我正在浏览一个状态列表。正在使用的州之一是俄勒冈州或“OR”,而那个州导致我出错。

我收到错误“错误:在需要数字操作数的 %EVAL 函数或 %IF 条件中找到字符操作数。条件为:&ST^=错误:%DO %WHILE 循环中的条件 &ST^= 产生无效或缺失值,。宏将停止执行。

我已经使用了所有各种引用掩码来尝试解决这个问题,但都没有用。

&STATES 包括以下状态:AK,AZ,CA,HI,ID,NV,OR,WA

这是我当前的代码:

RSUBMIT;
PROC SQL;
connect to oracle
(path=DW user=&USER pw=&PW);
%macro DTCNT() / parmbuff;
%let i=1;
%let ST=%scan(&SYSPBUFF,&I);

%do %while (&ST^=);
CREATE TABLE MD_&ST._IP_ADJDT_CNTS_S1 AS
select *
from connection to oracle
(SELECT adjudication_date,
count (*) as LINE_CNT
from MD_r&NUM..&ST._IP_hdr_f
group by adjudication_date
order by adjudication_date);

%let i=%eval(&I+1);
%let ST=%scan(&SYSPBUFF,&I);
%end;
%mend DTCNT;
%DTCNT(&STATES);

disconnect from oracle;
QUIT;
ENDRSUBMIT;

如有任何帮助,我们将不胜感激。

提前致谢。

最佳答案

这里的问题是俄勒冈州。它的缩写是OR,也是一个保留字(哎呀!)。请记住,宏语言只是文本,然后会像正常情况一样进行解析 - 所以当它找到 &ST 并翻译成 OR 时,它会将其视为

%do %while (or ^= )

这会导致它感到困惑,因为它看不到任何可以与 or 一起使用的东西。

您可以在此处使用宏引号使 SAS 不将其视为 bool 运算符。 %SUPERQ 是我的首选,但其中一些应该有效。

这是一个例子。我还添加了一些额外的东西来扫描以处理括号。

%let states=AK,AZ,CA,HI,ID,NV,OR,WA;
%macro DTCNT() / parmbuff;
%let i=1;
%put &=syspbuff.;
%let ST=%scan(&SYSPBUFF,&I,%str(%(%),));
%put &=st.;

%do %while (%superq(ST)^=);
%put &=st;
%let i=%eval(&i.+1);
%let ST=%scan(&SYSPBUFF,&I,%str(%(%),));
%end;
%mend DTCNT;
%DTCNT(&STATES);

关于sas - 如何使用宏中的 SYSPBUFF 通过变量列表屏蔽 "OR",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com