如何将日期列放入宏变量 SAS 中

How to put date column into macro variable SAS

提问人:B K 提问时间:11/18/2023 更新时间:11/18/2023 访问量:31

问:

我有一个包含 2 个日期列的数据集。dataset1 中的日期列的格式类似于“01/01/2024”

我把它们都放到一个宏变量中,如下所示:-

%if &DateType. = date1 %then %do;

proc sql no print;
select date1 into: date separated by ', '
from dataset1;
quit;

%end;
%else %if &DateType. = date2 %then %do;

proc sql no print;
select date2into: date separated by ', '
from dataset1;
quit;
%end;

我想在where语句中使用这个宏变量:-

proc sql;
create table want as
select *
from dataset1
where &date. > '01Dec2028'd
;
quit;

但是,我不断收到“错误:语法错误,期待以下之一......”在我的宏中很有价值。我需要更改格式吗?

SAS 程序-SQL

评论

0赞 Tom 11/18/2023
如果要将其与单个日期进行比较,为什么要制作逗号分隔的值列表?DATE1 和 DATE2 变量是否附加了 FORMAT?如果是这样,那么生成到宏变量中的字符串将不能用作日期(即使只有一个)。您需要一个表示天数的数字字符串,或者一个带引号的字符串,该字符串可以由附加字母 d 的 DATE 格式读取,例如 。你可以试试23350'06DEC2023'dselect &datetype format=32. into :date trimmed from dataset1

答:

2赞 Stu Sztukowski 11/18/2023 #1

如果您的日期解析为多个日期,您将传递一个以逗号分隔的数字日期列表。换言之,可以解决:&date

proc sql;
create table want as
select *
from dataset1
where 23330,23331 > '01Dec2028'd
;
quit;

您需要从表格中选择一个日期。您可以通过选择最长日期或最小日期来执行此操作。此外,如果 中不存在有效日期,它也可能将缺失值传递给它,因此您需要验证表中是否存在非缺失日期。例如:dataset1dataset1

proc sql no print;
select max(date1) into: date
from dataset1
where NOT missing(date1)
quit;

%if(&sqlobs = 0) %then %do;
    %put ERROR: No valid dates exist in DATASET1.;
    %abort;
%end;