SQL 如何解决 SAS 中的语法问题
SQL how to resolve problem with syntax in SAS
帮助我,它向我显示了一个错误 t1.data_od 我有一个语法错误,但我不知道这里有什么问题
create table PolisyEnd as
select
t1.obj_oid
,t1.PRP_AGREEMENT
,t1.PRP_POLICYNUMBER
,t1.PRP_SOCIETY_PID
,t1.PRP_END_DATE as PRP_END_DATE
from
cmz.WMDTZDP_BH t1 ,
where t1.data_od = &first_day.
and t1.data_do = &gv_date_dly.
left join
(select kontr_id,obj_oid from cmz.BH_D_ZAB_X_ALOK_&thismonth where data_danych = &gv_date_dly.) t2 on t2.obj_oid = t1.obj_oid ;
quit;
%let gv_date_dly=%sysevalf(%bquote('&date_dly.'d));
%let thismonth=%sysfunc(putn(%sysfunc(today()),yymmn10.));
%let first_day = %sysfunc(intnx(month,%sysfunc(today()),0,b));
%let last_day = %sysfunc(intnx(month,%sysfunc(today()),0,e));
假设您删除了 cmz.WMDTZDP_BH t1
旁边的逗号,我想 LEFT JOIN
可能存在问题,应该在 WHERE
语句之前使用。
让我们确保您首先执行宏变量:
%let gv_date_dly=%sysevalf(%bquote('&date_dly.'d));
%let thismonth=%sysfunc(putn(%sysfunc(today()),yymmn10.));
%let first_day = %sysfunc(intnx(month,%sysfunc(today()),0,b));
%let last_day = %sysfunc(intnx(month,%sysfunc(today()),0,e));
然后,您更新后的查询可能如下所示(在 WHERE 之前放置 LEFT JOIN):
PROC SQL; /* --> Just in case if you missed*/
create table PolisyEnd as
select
t1.obj_oid
,t1.PRP_AGREEMENT
,t1.PRP_POLICYNUMBER
,t1.PRP_SOCIETY_PID
,t1.PRP_END_DATE as PRP_END_DATE
from
cmz.WMDTZDP_BH t1
left join
(select kontr_id,obj_oid from cmz.BH_D_ZAB_X_ALOK_&thismonth where data_danych = &gv_date_dly.) t2
on t2.obj_oid = t1.obj_oid
where t1.data_od = &first_day.
and t1.data_do = &gv_date_dly.;
quit;
帮助我,它向我显示了一个错误 t1.data_od 我有一个语法错误,但我不知道这里有什么问题
create table PolisyEnd as
select
t1.obj_oid
,t1.PRP_AGREEMENT
,t1.PRP_POLICYNUMBER
,t1.PRP_SOCIETY_PID
,t1.PRP_END_DATE as PRP_END_DATE
from
cmz.WMDTZDP_BH t1 ,
where t1.data_od = &first_day.
and t1.data_do = &gv_date_dly.
left join
(select kontr_id,obj_oid from cmz.BH_D_ZAB_X_ALOK_&thismonth where data_danych = &gv_date_dly.) t2 on t2.obj_oid = t1.obj_oid ;
quit;
%let gv_date_dly=%sysevalf(%bquote('&date_dly.'d));
%let thismonth=%sysfunc(putn(%sysfunc(today()),yymmn10.));
%let first_day = %sysfunc(intnx(month,%sysfunc(today()),0,b));
%let last_day = %sysfunc(intnx(month,%sysfunc(today()),0,e));
假设您删除了 cmz.WMDTZDP_BH t1
旁边的逗号,我想 LEFT JOIN
可能存在问题,应该在 WHERE
语句之前使用。
让我们确保您首先执行宏变量:
%let gv_date_dly=%sysevalf(%bquote('&date_dly.'d));
%let thismonth=%sysfunc(putn(%sysfunc(today()),yymmn10.));
%let first_day = %sysfunc(intnx(month,%sysfunc(today()),0,b));
%let last_day = %sysfunc(intnx(month,%sysfunc(today()),0,e));
然后,您更新后的查询可能如下所示(在 WHERE 之前放置 LEFT JOIN):
PROC SQL; /* --> Just in case if you missed*/
create table PolisyEnd as
select
t1.obj_oid
,t1.PRP_AGREEMENT
,t1.PRP_POLICYNUMBER
,t1.PRP_SOCIETY_PID
,t1.PRP_END_DATE as PRP_END_DATE
from
cmz.WMDTZDP_BH t1
left join
(select kontr_id,obj_oid from cmz.BH_D_ZAB_X_ALOK_&thismonth where data_danych = &gv_date_dly.) t2
on t2.obj_oid = t1.obj_oid
where t1.data_od = &first_day.
and t1.data_do = &gv_date_dly.;
quit;