Вопрос

I have an error when I run SAS format at Netezza. I added the format at the beginning of the following code. However, it didn't work those at Netezza. If possible, could you help to see the two put statement in where statement at PROC SQL part? Thanks in advance!

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;
Это было полезно?

Решение

You're putting SAS code in a passthrough session. You need to write that as Netezza syntax (passthrough is literally sending that string of code to Netezza without doing anything to it and saying "Here you go, run this please and get back to me"), or else place those PUT statements in the step where you transfer the data. You can do it in that second step (as part of the "select * from DW...") as that's SAS syntax, not passthrough.

You probably can perform those joins as part of the second select (skipping the first) using LIBNAME instead of PASSTHROUGH, in any event; SAS will likely pass that back to Netezza anyway. I'd give that a shot first.

Другие советы

Here is the code for format issue at 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top