SAS中的Netezza格式

时间:2013-09-10 15:25:46

标签: sas netezza

我在Netezza上运行SAS格式时出错。我在以下代码的开头添加了格式。然而,它并没有在Netezza工作。如果可能,您是否可以帮助在 PROC SQL 部分的 where 语句中看到两个 put 语句?提前谢谢!

data antib;
  set 'P:\HSE\SPARC\SPARC Study\Docs\sparc_ndc_final_05202013.sas7bdat';
  if ndc ~='';
  start=NDC;
  label='Y';
  type='C';
  fmtname='antib';
run;

proc sort data=antib nodupkey;
  by ndc;
run;

proc format cntlin=antib;run;


data stdyfmt(keep=start label fmtname);
  set pharm.pulllist (where=(flag='study'));
  start=sub_num;
  label='in';
  fmtname='$stdy';
run;
proc sort nodup;by start;run;
proc format cntlin=stdyfmt;run;


libname sparc "/bcbsuser/hse/jfan0001/SPARC";

%let cov_start='01Jan2008';
%let cov_end='31Dec2008';

data _null_; 
 call symput('start',trim(left(&cov_start.d -'31DEC1983'd)));
 call symput('end',trim(left(&cov_end.d -'31DEC1983'd)));
run;    


%let cov_start = '01-01-2008';
%let cov_end = '12-31-2008';

LIBNAME DW NETEZZA UID=jfan0001
               PWD=xxxxxxxx
               SERVER=bsnet01z
         database=PDWAPPRP
         preserve_tab_names=yes
         connection=global;

proc sql noprint ; 
 connect to netezza  (user=jfan0001 pwd=xxxxxxxx SERVER=bsnet01z            database=PDWAPPRP  connection=global autocommit=yes); 
 execute( Create temporary table PHARM_STDY_DW as 
      select distinct  
      D.MEM_NUM , D.SUB_NUM , D.MEM_BIRTH_DT, D.MEM_GENDER,
            A.PRESCRIPT_NUM     , 
            A.PRESCRIB_NPI   ,
            A.NUM_REFILLS      ,
            A.incurred_dt_key ,
            B.CLM_NDC    ,
            C.MDDB_TC_CLASS_CD  ,
            A.METRIC_QUANTITY   ,
            A.DAYS_SUPPLY       , 
            A.PRESCRIB_DEA_NUM      ,

        FROM 
            V_PHARM_SERVICE             A,  
        V_PHACLM_DRUG               B,
        V_MDDB_DRUG                 C,
        V_CLAIM_MEMBER_PROFILE      D,
            V_INCURRED_DATE             E

        WHERE
        PUT(D.SUB_NUM, $stdy.) = 'in'        and  /*problem for this statement*/
        PUT(B.CLM_NDC, $antib.) = 'Y'       and /*problem for this statement too*/
        A.curr_clm_ind ='Y'                and      
        A.MEM_PROF_KEY = D.MEM_PROF_KEY         and
        A.PHACLM_DRUG_KEY = B.PHACLM_DRUG_KEY   and
        A.MDDB_DRUG_KEY = C.MDDB_DRUG_key       and
        A.INCURRED_DT_KEY = E.INCURRED_DT_KEY   and
        E.INCURRED_DT_DAY between &cov_start and &cov_end
   ) by netezza;  


/* bulkunload table from netezza to ADM as SAS dataset */
     create table SPARC.PHARM_STDY_DW_08 as
     select * from  DW.PHARM_STDY_DW
       (bulkunload=YES BL_DELIMITER='|' bl_options='logdir "."');
  disconnect from netezza;
quit;

2 个答案:

答案 0 :(得分:0)

您正在将SAS代码置于直通会话中。你需要把它写成Netezza语法(passthrough实际上是把这段代码发送到Netezza而不对它做任何事情并且说“你去,请运行这个请回到我身边”),或者把那些PUT语句放在转移数据的步骤。您可以在第二步(作为“select * from DW ...”的一部分)执行此操作,因为它是SAS语法,而不是直通。

在任何情况下,您都可以使用LIBNAME而不是PASSTHROUGH作为第二个选择(跳过第一个)的一部分执行这些连接;无论如何,SAS可能会将其传回Netezza。我先给它一个镜头。

答案 1 :(得分:0)

以下是Netezza格式问题的代码,

proc sql   noprint;
  connect to netezza  (user=mxxxx pwd=xxxx SERVER=bsnet01z database=PDWAPPRP  connection=global autocommit=yes); 

execute ( create temporary table STDY
                 ( SUB_NUM char(13) )) by netezza;
execute ( create temporary table ANTIB
                 ( NDC char(11) )) by netezza;


insert into dw.STDY (bulkload=YES   bl_options='logdir "."')
            select SUB_NUM from pulllist     /* list of SUB_NUM, no "in" or "other"*/ 
             where flag='study';

insert into dw.ANTIB (bulkload=YES   bl_options='logdir "."')
          select NDC from sparc_ndc     /*   list of CLM_NDC, no "Y" or "other";*/
             where ndc ~='';


execute( Create temporary table PHARM_STDY_DW as 
            Select distinct  
            D.MEM_NUM , D.SUB_NUM , D.MEM_BIRTH_DT, D.MEM_GENDER,
            A.PRESCRIPT_NUM     , 
            A.PRESCRIB_NPI ,
            A.NUM_REFILLS       ,
            A.incurred_dt_key ,
            B.CLM_NDC  ,
            C.MDDB_TC_CLASS_CD  ,
            A.METRIC_QUANTITY  ,
            A.DAYS_SUPPLY   , 
            A.PRESCRIB_DEA_NUM      

        FROM 
        V_PHARM_SERVICE             A,  
        V_PHACLM_DRUG               B,
        V_MDDB_DRUG                 C,
        V_CLAIM_MEMBER_PROFILE      D,
        V_INCURRED_DATE             E,
        STDY,
        ANTIB

        WHERE
        D.SUB_NUM=STDY.SUB_NUM                  AND
        B.CLM_NDC=ANTIB.NDC                     AND
        A.curr_clm_ind ='Y'                     and
        A.MEM_PROF_KEY = D.MEM_PROF_KEY         and
        A.PHACLM_DRUG_KEY = B.PHACLM_DRUG_KEY   and
        A.MDDB_DRUG_KEY = C.MDDB_DRUG_key       and
        A.INCURRED_DT_KEY = E.INCURRED_DT_KEY   and
        E.INCURRED_DT_DAY between &cov_start and &cov_end 
       ) by netezza;                   

/* bulkunload table from netezza to ADM as SAS dataset */
     create table SPARC.PHARM_STDY_DW_08 as
     select * from  DW.PHARM_STDY_DW
       (bulkunload=YES BL_DELIMITER='|' bl_options='logdir "."');

    disconnect from netezza;
quit;