【问题标题】:Why if statement is not working in sas macro?为什么 if 语句在 sas 宏中不起作用?
【发布时间】:2022-12-04 20:41:41
【问题描述】:

我想通过调用这个宏来取回一个字符,但是有一个错误:

%macro getcategory(日期=);

%全球类别;

%if %year(date) < 2002 %then %do; %let 类别 = A;

%修补;

%getcategory(日期=1999);

我尝试使用 symput 但没有工作。

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    看起来您正在尝试使用 %year() 函数来确定传递给 getcategory 宏的 date 参数的年份。但是,%year() 函数不是 SAS 语言的一部分。

    要从 SAS 日期值中获取年份,您可以使用 year() 函数,它是 SAS 日期和时间函数的一部分。以下是您可能如何使用它的示例:

    %macro getcategory(date=);
      %global category;
    
      %let year = %sysfunc(year(date));
      %if &year < 2002 %then %do;
        %let category = A;
      %end;
    %mend;
    
    %getcategory(date=1999);
    

    在此示例中,%sysfunc() 函数用于调用宏中的year() 函数。这是必需的,因为 year() 函数是 SAS 函数,而不是宏语言函数。

    请注意,year() 函数将年份作为四位数返回,因此您需要将其与值 2002 而不是值 2 进行比较。

    我希望这有帮助!如果您有任何其他问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多