LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (January 2005, week 4)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Wed, 26 Jan 2005 09:02:46 -0500
Reply-To:   Peter Crawford <peter.crawford@BLUEYONDER.CO.UK>
Sender:   "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:   Peter Crawford <peter.crawford@BLUEYONDER.CO.UK>
Subject:   Re: Macro to read a flat file into SAS from a DB2 DDL?
Comments:   To: Talbot Michael Katz <topkatz@MSN.COM>

you're probably retreading old steps, but I've no code converter macro for this,. Hopefully others might have something to offer. However, I might be able to help a little on code generation for the timestamps Assuming these are loaded as names with a _dt suffix, here is a macro to generate the conversion of a generic one %macro dt( name )/des=' load from &name._dt ' ; /* expecting layout 2004-03-21-14.23.50.730219 */ &name= dhms( input( &name._dt, ?? yymmdd10. ) , input( scan( &name._dt, 4, '.-' ), ?? 2. ) , input( scan( &name._dt, 5, '.-' ), ?? 2. ) , input( scan( &name._dt, 6, '.-' ) !! '.' !! scan( &name._dt, 7, '.-' ) , ?? 11. ) ) ; attrib &name format=datetime. informat= datetime. ; %mend dt ; Using scan() allows 1-digit values for hour minute and second, which might cause problems for substr().

To apply that across all the timestamp data, I would use %mLoopsX( execut= dt, with = &timestamps ) where &timestamps contains a (space separated) list of the names of the timestamp variables.

%mloopsx features in the sas-l archives.... The most recent version uses %superq(). Let me know if that version doesn't turn up when you search.

Good Luck Peter Crawford Crawford Software Consultancy Limited

On Mon, 24 Jan 2005 18:28:39 -0500, Talbot Michael Katz <topkatz@MSN.COM> wrote:

>Hi. > >I have a pipe-delimited ("|") ASCII file taken from a DB2 table, and >a "DDL" layout of that table. I was wondering whether there was a canned >macro (pre-SAS v9) to read the ASCII file into SAS according to the DDL >specifications. The DDL looks like this (of course, the names have been >changed, so if one comes up twice by accident, don't worry): > >CREATE TABLE "BBB"."XXX_TAB" ( > "V1_ID" VARCHAR(15) NOT NULL , > "V2_ID" VARCHAR(50) , > "C3_ID" VARCHAR(30) , > "P1_ORG" VARCHAR(100) , > "O1_ORG" CHAR(2) , > "A_NME" VARCHAR(100) , > "A_ATUS" VARCHAR(30) , > "PL_CD" VARCHAR(15) , > "PL_NM" VARCHAR(30) , > "LAST_UPD" TIMESTAMP NOT NULL , > "MF_NUM" VARCHAR(40) , > "MP_NUM" VARCHAR(40) , > "AC_NME" VARCHAR(100) NOT NULL , > "AC_TYE" VARCHAR(30) , > "P_ACCT" VARCHAR(15) , > "PI_CD" VARCHAR(15) , > "PI_NM" VARCHAR(60) , > "AC_GRA" VARCHAR(30) , > "AC_HGI" CHAR(1) , > "AC_HGI_DT" TIMESTAMP , > "AC_HQ" VARCHAR(30) , > "AC_PB" VARCHAR(30) , > "AC_TI" VARCHAR(30) , > "AC_TI_DT" TIMESTAMP , > "AL_NME" VARCHAR(100) , > "ARL_AMT" DECIMAL(22,7) , > "ARLC_CD" VARCHAR(15) , > "ARU_AMT" DECIMAL(22,7) , > "CO_HGI" CHAR(1) , > "CO_HGI_DT" TIMESTAMP , > "CO_PB" VARCHAR(30) , > "CS_HGI" CHAR(1) , > "CS_HGI_DT" TIMESTAMP , > "CS_PB" VARCHAR(30) , > "CIS_CD" VARCHAR(30) , > "CV_ID" VARCHAR(30) , > "CV_RN" VARCHAR(30) , > "CV_ST" VARCHAR(30) , > "CV_TE" VARCHAR(30) , > "CT_OP" VARCHAR(30) , > "CT_S_CD" VARCHAR(30) , > "CT_VE" VARCHAR(30) , > "BG_BR" VARCHAR(30) , > "BG_DC_HE" VARCHAR(30) , > "AC_CS" VARCHAR(30) , > "CRS_FLG" VARCHAR(30) , > "CTS_UED" VARCHAR(30) , > "A0_DC_HE" VARCHAR(30) , > "E_C_DC_HE" VARCHAR(30) , > "N_DC_HE" VARCHAR(30) , > "R0_DC_HE" VARCHAR(30) , > "S_DC_HE" VARCHAR(30) , > "WN_DC_HE" VARCHAR(30) , > "D_PY_FLG" CHAR(1) , > "DQ_SS" VARCHAR(30) , > "D_NU" VARCHAR(15) , > "D_P_NU" VARCHAR(15) , > "D_M_T_NU" VARCHAR(15) , > "D_L_T_NU" VARCHAR(15) , > "EM_CO" DECIMAL(22,7) , > "D_DIS" VARCHAR(9) , > "D_P_IND" VARCHAR(1) , > "D_HIEHY" VARCHAR(2) , > "D_L_D_NU" VARCHAR(16) , > "D_L_SM" VARCHAR(30) , > "D_V_S" VARCHAR(15) , > "D_IC" VARCHAR(30) , > "D_TUS" VARCHAR(30) , > "ESE_EM" DECIMAL(22,7) , > "ESE_RE" DECIMAL(22,7) , > "ESE_V_R" DECIMAL(22,7) , > "ESB_V" DECIMAL(22,7) , > "ESB_V_R" DECIMAL(22,7) , > "EXC_RN" VARCHAR(30) , > "FAL_HTH" VARCHAR(30) , > "HIG_U" VARCHAR(30) , > "ICC_SCE" VARCHAR(30) , > "IC" VARCHAR(15) , > "IS_DON" VARCHAR(30) , > "IS_BET" VARCHAR(30) , > "IT_BET" VARCHAR(30) , > "LA_VTE_DT" TIMESTAMP , > "LEL_TUS" VARCHAR(30) , > "LNS_NU" DECIMAL(10,0) , > "MIY_OWD" VARCHAR(30) , > "WEN_OWD" VARCHAR(30) , > "MK_EA" VARCHAR(30) , > "PAER" VARCHAR(100) , > "RUE_R" DECIMAL(22,7) , > "SUIE_FLG" CHAR(1) , > "TIEUAD" VARCHAR(30) , > "PR_DR" VARCHAR(200) , > "PR_TY" VARCHAR(50) , > "PR_TE" VARCHAR(10) , > "PR_X_TE_DE" VARCHAR(255) , > "PR_DE" VARCHAR(30) , > "PR_NTY" VARCHAR(50) , > "PR_TRY" VARCHAR(30) , > "PR_DR_T_UPD" TIMESTAMP , > "MN_DR" VARCHAR(200) , > "MN_TY" VARCHAR(50) , > "MN_TE" VARCHAR(10) , > "MN_X_TE_DE" VARCHAR(255) , > "MN_DE" VARCHAR(30) , > "MN_NTY" VARCHAR(50) , > "MN_TRY" VARCHAR(30) , > "MN_DR_T_UPD" TIMESTAMP ) > PARTITIONING KEY ("V1_ID") USING HASHING > IN "DM0_L_DAT" INDEX IN "DM0_L1_IDX" ; > > >If I have to write the macro myself, I will, but it's busy work. For >example, the timestamp data looks like this: >2004-03-21-14.23.50.730219 >but SAS v8 doesn't recognize that as a datetime value, so it has to be >transformed (which might be outside the capability of an existing macro; I >can do it in a laborious fashion, but if someone has an efficient way to >transform the datetimes, please let me know). > >Thanks! > >-- TMK -- >"The Macro Klutz"


Back to: Top of message | Previous page | Main SAS-L page