如何在使用 proc sql 创建 table 时调用选择日期范围的提示?
How to call a prompt that selects a date range when I create a table using proc sql?
我想问一下如何在创建 table 的过程 sql 中调用提示(我正在使用 SAS Enterprise Guide)。
我有兴趣将一个数字关联到日期月份(如下面的 table 所示),其中 d_month 可以通过使用提示 selected。
time_window d_month database_name table_name short_name group_field field field_list
1 '2018-02-28' Dtb1 table1 Tab1 date_month department Tab1.id Tab1.balance id balance
1 '2018-02-28' Dtb1 table2 Tab2 date_month Tab2.credit credit
...
2 '2018-03-31' Dtb1 table3 Tab3 date_month department Tab3.debit debit
2 '2018-03-31' Dtb2 table4 Tab4 date_month department ...
我用了
proc sql noprint;
select time_w into time_w_lower from &time_table..time_table where time_last="&time_win_min_end"d;
quit;
proc sql noprint;
select time_w into time_w_upper from &time_table..time_table where time_last="&time_win_max_end"d;
quit;
创建最小和最大日期(这应该与提示相同),但是我 select 新字段 table 时不知道如何使用这些信息].
时间和日期月份 (d_month
) 在一个 table (&time_table..time_table
) 中,而其他字段在另一个 (&dtb..&input.
) 中。
我试过的是:
proc sql;
create table table_test4 as
select t.time_window
,t.d_month
,&alias..date_month
,&alias..department
,%qsysfunc(dequote(&_factor.))
from &dtb..&input. &alias.
cross join time_window t
order by 1,2,3,4;
quit;
其中 time_window
是按如下方式创建的 table:
data time_window (drop=i);
attr time_window length=8 format=11. informat=11.;
attr d_month length=14 format=. informat=.;
do =&time_w_lower. to time_w_upper.;
time_window=left(put(i,4.));
d_month=CAT("'", put(intent('month',"01JAN2010"d, i-1, 'end'), YYMMDDD10.),"'");
output;
end;
run;
不幸的是,我没有可以显示的数据,因此,如果您能提供给我任何示例,我们将不胜感激。
感谢您的宝贵时间。
您应该使用数据范围类型创建 promt:
将创建的提示添加到您的节点。
然后您可以使用从该提示生成的宏变量。
要知道生成了什么变量,您可以 运行:
%put _ALL_;
GLOBAL DATE_MAX 31Dec2019
GLOBAL DATE_MAX_LABEL December 31, 2019
GLOBAL DATE_MIN 01Dec2019
GLOBAL DATE_MIN_LABEL December 01, 2019
因此,在 proc sql
中您可以使用 "&DATE_MAX."d
和“&DATE_MIN."d
white DATE 是您的提示名称。
我想问一下如何在创建 table 的过程 sql 中调用提示(我正在使用 SAS Enterprise Guide)。 我有兴趣将一个数字关联到日期月份(如下面的 table 所示),其中 d_month 可以通过使用提示 selected。
time_window d_month database_name table_name short_name group_field field field_list
1 '2018-02-28' Dtb1 table1 Tab1 date_month department Tab1.id Tab1.balance id balance
1 '2018-02-28' Dtb1 table2 Tab2 date_month Tab2.credit credit
...
2 '2018-03-31' Dtb1 table3 Tab3 date_month department Tab3.debit debit
2 '2018-03-31' Dtb2 table4 Tab4 date_month department ...
我用了
proc sql noprint;
select time_w into time_w_lower from &time_table..time_table where time_last="&time_win_min_end"d;
quit;
proc sql noprint;
select time_w into time_w_upper from &time_table..time_table where time_last="&time_win_max_end"d;
quit;
创建最小和最大日期(这应该与提示相同),但是我 select 新字段 table 时不知道如何使用这些信息].
时间和日期月份 (d_month
) 在一个 table (&time_table..time_table
) 中,而其他字段在另一个 (&dtb..&input.
) 中。
我试过的是:
proc sql;
create table table_test4 as
select t.time_window
,t.d_month
,&alias..date_month
,&alias..department
,%qsysfunc(dequote(&_factor.))
from &dtb..&input. &alias.
cross join time_window t
order by 1,2,3,4;
quit;
其中 time_window
是按如下方式创建的 table:
data time_window (drop=i);
attr time_window length=8 format=11. informat=11.;
attr d_month length=14 format=. informat=.;
do =&time_w_lower. to time_w_upper.;
time_window=left(put(i,4.));
d_month=CAT("'", put(intent('month',"01JAN2010"d, i-1, 'end'), YYMMDDD10.),"'");
output;
end;
run;
不幸的是,我没有可以显示的数据,因此,如果您能提供给我任何示例,我们将不胜感激。
感谢您的宝贵时间。
您应该使用数据范围类型创建 promt:
将创建的提示添加到您的节点。
然后您可以使用从该提示生成的宏变量。 要知道生成了什么变量,您可以 运行:
%put _ALL_;
GLOBAL DATE_MAX 31Dec2019
GLOBAL DATE_MAX_LABEL December 31, 2019
GLOBAL DATE_MIN 01Dec2019
GLOBAL DATE_MIN_LABEL December 01, 2019
因此,在 proc sql
中您可以使用 "&DATE_MAX."d
和“&DATE_MIN."d
white DATE 是您的提示名称。