SAS:创建可以回顾 x 个月前的参数
SAS: create parameter that can look x months back
我一直在寻找一种方法来创建一个变量,它可以让我 运行 一个过程 sql select 一个 table 特定的 10 个月背部。参数格式应为 YYYYMM.
例如&YYYYMM = 202102
这将允许我 运行 proc sql select 从 202005 到 202101 的数据。
非常感谢任何帮助!!
非常感谢!!
我假设如果您输入 202102,那么您需要 01.02.2021 之前的所有日期。请尝试以下操作:
/*Example dataset with dates*/
Data have(drop=x);
date = '01jan2020'd;
do x = 0 to 730;
date = date + 1;
output;
end;
Format date date9.;
Run;
/*Your variable in format YYYYMM*/
%Let date = 202102;
/*Convert to your variable SAS date */
Data _null_;
Format date_new date9.;
date_new = input("&date" !! "01",yymmdd8.);
Call symputx('date_new',date_new);
Run;
%put &date_new;
/*Select required date ranges from the have dataset*/
Proc sql;
Create table want as
Select *
From have
Where intnx('month',&date_new,-10,'S') <= date < &date_new;
Quit;
/*Check results*/
Proc sql;
Select min(date) format=date9.
,max(date) format=date9.
From want;
Quit;
所以你想制作一个每个日期只有一个观察值的数据集?你想创建 DATE 变量还是 CHARACTER 变量?或者可能是将这些数字字符串作为数字而不是实际日期值的数字变量?
%let end_month=202102;
data want;
do offset=-9 to -1 ;
date = intnx('month',input("&end_month",yymmn6.),offset);
string=put(date,yymmn6.);
number=input(string,6.);
output;
end;
format date yymmdd10.;
run;
结果:
我一直在寻找一种方法来创建一个变量,它可以让我 运行 一个过程 sql select 一个 table 特定的 10 个月背部。参数格式应为 YYYYMM.
例如&YYYYMM = 202102 这将允许我 运行 proc sql select 从 202005 到 202101 的数据。
非常感谢任何帮助!! 非常感谢!!
我假设如果您输入 202102,那么您需要 01.02.2021 之前的所有日期。请尝试以下操作:
/*Example dataset with dates*/
Data have(drop=x);
date = '01jan2020'd;
do x = 0 to 730;
date = date + 1;
output;
end;
Format date date9.;
Run;
/*Your variable in format YYYYMM*/
%Let date = 202102;
/*Convert to your variable SAS date */
Data _null_;
Format date_new date9.;
date_new = input("&date" !! "01",yymmdd8.);
Call symputx('date_new',date_new);
Run;
%put &date_new;
/*Select required date ranges from the have dataset*/
Proc sql;
Create table want as
Select *
From have
Where intnx('month',&date_new,-10,'S') <= date < &date_new;
Quit;
/*Check results*/
Proc sql;
Select min(date) format=date9.
,max(date) format=date9.
From want;
Quit;
所以你想制作一个每个日期只有一个观察值的数据集?你想创建 DATE 变量还是 CHARACTER 变量?或者可能是将这些数字字符串作为数字而不是实际日期值的数字变量?
%let end_month=202102;
data want;
do offset=-9 to -1 ;
date = intnx('month',input("&end_month",yymmn6.),offset);
string=put(date,yymmn6.);
number=input(string,6.);
output;
end;
format date yymmdd10.;
run;
结果: