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;