gpt4 book ai didi

error-handling - 在SAS : Required operator not found in expression的DO循环中使用宏变量时出错

转载 作者:行者123 更新时间:2023-12-03 07:40:44 25 4
gpt4 key购买 nike

我正在使用SAS,并且我需要组合多个表,每个表的名称后都有月和年的后缀。根据用户定义的开始和结束日期,要使用的特定表将是可变的。为了实现这一点,我试图通过宏使用do循环在日期范围内循环通过月/年,并将其追加到上一张表中。但是,我遇到了问题(似乎使用循环中开始/结束年份的宏变量来处理它)。我收到以下错误:

ERROR: Required operator not found in expression: &start_year. 
ERROR: The %FROM value of the %DO QUOTE_YEAR loop is invalid.
ERROR: Required operator not found in expression: &end_year.
ERROR: The %TO value of the %DO QUOTE_YEAR loop is invalid.
ERROR: The macro GET_PRICES will stop executing.

这是我提供的一些示例测试代码,该代码复制了产生错误的问题,在该错误之上我尝试调试。请注意,在本示例中,我仅循环浏览这些年份。 (一旦解决此问题,我将在几个月中添加。)
DATA _NULL_;
FORMAT start_date end_date DATE9.;
start_date = '01JUL2018'd;
end_date = '30JUN2019'd;
CALL SYMPUT('start_date',start_date);
CALL SYMPUT('end_date',end_date);
RUN;

%MACRO get_prices(start_date, end_date);
%LET start_year = year(&start_date.);
%LET end_year = year(&end_date.);
%LET start_month = month(&start_date.);
%LET end_month = month(&end_date.);
DATA test;
t = 0;
RUN;
%DO quote_year = &start_year. %TO &end_year.;
DATA test2;
t = &quote_year.;
RUN;
PROC APPEND BASE= test DATA= test2;
%END;
%MEND;

%get_prices(&start_date.,&end_date.);

预期输出是具有单列't'和3行的表:(0,2018,2019)。 (我刚添加的0值用于初始化要附加的非空表。)当我将循环值中的宏变量替换为开始/结束年份的实际值时,该代码起作用。

不起作用
%DO quote_year = &start_year. %TO &end_year.;

作品
%DO quote_year = 2018 %TO 2019;

我无法解决导致此失败的原因。我相信它一定与我定义宏变量的方式有关,但是奇怪的是,如果我完全删除do循环并在%LET语句下包含以下数据步骤,则这些值将按预期显示。
DATA test_macro_values;
s = &start_year.;
t = &end_year.;
u = &start_month.;
v = &end_month.;
RUN;

谁能看到发生了什么事?

最佳答案

没有名为yearmonth的宏函数。您应该使用%sysfunc:

%LET start_year = %sysfunc(year(&start_date.));
%LET end_year = %sysfunc(year(&end_date.));
%LET start_month = %sysfunc(month(&start_date.));
%LET end_month = %sysfunc(month(&end_date.));

关于error-handling - 在SAS : Required operator not found in expression的DO循环中使用宏变量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60168989/

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