Sas 输入日期格式YYYYMMDD

Sas 输入日期格式YYYYMMDD,sas,Sas,我需要以YYYYMMDD格式输入日期,并根据这些日期创建宏变量,以便在WHERE子句中使用。最终数据集应从Sales中选择一条记录,但返回0个观察值 data work.FiscalYear2019; input @1 fiscalYear $4. @5 StartDate mmddyy8.; retain diff; if fiscalYear = '2019' then do; tday = today(); diff = tday - StartDate; call

我需要以YYYYMMDD格式输入日期,并根据这些日期创建宏变量,以便在WHERE子句中使用。最终数据集应从Sales中选择一条记录,但返回0个观察值

data work.FiscalYear2019;
input @1 fiscalYear $4. @5 StartDate mmddyy8.;
retain diff;
if fiscalYear = '2019' then do;
    tday = today();
    diff = tday - StartDate;
    call symputx('FYTD_days',diff);
    call symputx('CY_StartDate', StartDate);
    call symputx('CY_EndDate', put(today(),mmddyy8.));
end;
else if fiscalYear = '2018' then do;
    PY_EndDate = StartDate + diff;
    call symput('PY_EndDate', put(PY_EndDate,mmddyy8.));
    call symput('PY_StartDate', put(StartDate,mmddyy8.));
end;

datalines;
201912312018
201801012018 
;
data work.Sales;
input @1 fiscalYear $4. @5 orderDate mmddyy8.;
format orderDate mmddyy6.;
datalines;
201902042019
201801012018
;
data final  (WHERE=(orderDate >= &PY_StartDate AND
                   orderDate <= &PY_EndDate));
set Sales;
run;
data work.FiscalYear2019;
输入@1财政年度$4@5开始日期mmddyy8。;
保留差异;
如果财政年度=2019年,则执行;
tday=今天();
diff=tday-开始日期;
电话会议(“FYTD_天”,差异);
调用symputx(“CY_StartDate”,StartDate);
调用symputx('CY_EndDate',put(today(),mmddyyy8.));
结束;
否则,如果财政年度=2018年,则执行;
PY_EndDate=开始日期+差异;
调用symput('PY_EndDate',put(PY_EndDate,mmddyy8.);
调用symput('PY_StartDate',put(StartDate,mmddyy8.);
结束;
数据线;
201912312018
201801012018
;
数据工作。销售;
输入@1财政年度$4@5订单日期mmddyy8。;
格式化订单日期mmddyy6。;
数据线;
201902042019
201801012018
;
最终数据(其中=(orderDate>=&PY_StartDate和

orderDate您只是在最后一个数据步骤中没有使用正确的语法引用宏变量。那些
&PY_StartDate
&PY_EndDate
变量只是宏代码编译后的字符串,您需要将它们作为日期常量引用。因此,这应该可以解决问题:

data final  (WHERE=(orderDate >= "&PY_StartDate"d AND
                   orderDate <= "&PY_EndDate"d));
set Sales;
run;
data final(其中=(orderDate>=“&PY_StartDate”d和

orderDate您只是在最后一个数据步骤中没有使用正确的语法引用宏变量。那些
&PY_StartDate
&PY_EndDate
变量只是宏代码编译后的字符串,您需要将它们作为日期常量引用。因此,这应该可以解决问题:

data final  (WHERE=(orderDate >= "&PY_StartDate"d AND
                   orderDate <= "&PY_EndDate"d));
set Sales;
run;
data final(其中=(orderDate>=“&PY_StartDate”d和

orderDate要将宏变量用作日期值,您需要生成宏变量作为原始天数值,就像您在CY_StartDate中所做的那样,或者使用日期格式生成宏变量,并将其括在引号中,并附加字母D以形成日期文字

像这样:

call symputX('PY_StartDate', put(StartDate,date9.));
call symputX('PY_EndDate', PY_EndDate);
...
data final
  set Sales;
  WHERE orderDate >= "&PY_StartDate"d
   AND  orderDate <= &PY_EndDate
  ;
run;
调用symputX('PY_StartDate',put(StartDate,date9.);
调用symputX('PY\u EndDate',PY\u EndDate);
...
最终数据
设置销售;
其中orderDate>=“&PY_StartDate”d

和orderDate要使用宏变量作为日期值,您需要生成宏变量作为原始天数值,就像您在CY_StartDate中所做的那样,或者使用日期格式生成宏变量,并将其括在引号中,并附加字母D以形成日期文字

像这样:

call symputX('PY_StartDate', put(StartDate,date9.));
call symputX('PY_EndDate', PY_EndDate);
...
data final
  set Sales;
  WHERE orderDate >= "&PY_StartDate"d
   AND  orderDate <= &PY_EndDate
  ;
run;
调用symputX('PY_StartDate',put(StartDate,date9.);
调用symputX('PY\u EndDate',PY\u EndDate);
...
最终数据
设置销售;
其中orderDate>=“&PY_StartDate”d
和订购日期