I am so sorry - I used base code found in SAS examples called "24727 - Robust macro to write a delimited file- Sample" actual code is: OPTIONS SOURCE DQUOTE MISSING=''; DATA READIT; INFILE READIT MISSOVER; INPUT @ 0001 ACCOUNT_NUMBER $CHAR22. @ 0023 ADDRESS_FILTER_DATE $CHAR04. @ 0027 PHONE_FILTER_DATE $CHAR04. @ 0031 COA_NAME $CHAR27. @ 0058 COA_ADDRESS $CHAR39. @ 0097 COA_CITY $CHAR15. @ 0112 COA_STATE $CHAR02. @ 0114 COA_ZIP $CHAR09. @ 0123 COA_LAST_UPDT_DATE $CHAR04. @ 0127 PHONE_01 $CHAR10. @ 0137 PHONE_01_UPDT_DATE $CHAR04. @ 0141 PHONE_02 $CHAR10. @ 0151 PHONE_02_UPDT_DATE $CHAR04. @ 0155 PHONE_03 $CHAR10. @ 0165 PHONE_03_UPDT_DATE $CHAR04.; /* NO CHANGES HERE - YET ANYWAY - GO FURTHER DOWN.*/ %MACRO MAKEFILE ( DATASET=_LAST_ , /* DATASET TO WRITE */ FILENAME=WRITEIT , /* FILE TO WRITE TO */ DLMR="," , /* DELIMITER BETWEEN VALUES */ QTES="NO" , /* SHOULD SAS QUOTE ALL CHARACTER VARIABLES? */ HEADER="YES" , /* DO YOU WANT A HEADER LINE W/ COLUMN NAMES? */ LABEL="NO" /* SHOULD LABELS BE USED INSTEAD OF VAR NAMES? */ ); PROC CONTENTS DATA=&DATASET OUT=___OUT_; /* RETURN TO ORIG ORDER */ PROC SORT DATA=___OUT_; BY VARNUM; /* BUILD LIST OF VARIABLE NAMES */ DATA _NULL_; SET ___OUT_ NOBS=COUNT; CALL SYMPUT("NAME"!!LEFT(_N_),TRIM(LEFT(NAME))); CALL SYMPUT("TYPE"!!LEFT(_N_),TRIM(LEFT(TYPE))); /* USE VAR NAME WHEN LABEL NOT PRESENT */ IF LABEL=" " THEN LABEL=NAME; CALL SYMPUT("LBL"!!LEFT(_N_),TRIM(LEFT(LABEL))); IF _N_=1 THEN CALL SYMPUT("NUMVARS", TRIM(LEFT(PUT(COUNT, BEST.)))); /* CREATE FILE */ DATA _NULL_; SET &DATASET; FILE &FILENAME; %GLOBAL TEMP; %IF &QTES="YES" %THEN %LET TEMP='"'; %ELSE %LET TEMP=; /* OVER-RIDE - WAS A SPACE ' ' */ %IF &HEADER="YES" %THEN %DO; /* CONDITIONALLY ADD COLUMN NAMES */ IF _N_=1 THEN DO; PUT %IF &LABEL="YES" %THEN %DO; %DO I=1 %TO &NUMVARS-1; &TEMP "%TRIM(%BQUOTE(&&LBL&I)) " +(-1) &TEMP &DLMR %END; &TEMP "%TRIM(%BQUOTE(&&LBL&NUMVARS)) " &TEMP; %END; %ELSE %DO; %DO I=1 %TO &NUMVARS-1; &TEMP "%TRIM(&&NAME&I) " +(-1) &TEMP &DLMR %END; &TEMP "%TRIM(&&NAME&NUMVARS) " &TEMP ; %END; ; END; %END; /* BUILD PUT STMT TO WRITE VALUES */ PUT %DO I = 1 %TO &NUMVARS -1; %IF &&TYPE&I NE 1 AND &QTES="YES" %THEN %DO; '"' &&NAME&I +(-1) '"' &DLMR %END; %ELSE %DO; &&NAME&I +(-1) &DLMR %END; %END; %IF &&TYPE&I NE 1 AND &QTES="YES" %THEN %DO; /* WRITE LAST VARNAME */ '"' &&NAME&NUMVARS +(-1) '"'; %END; %ELSE %DO; /* WRITE LAST VARNAME */ &&NAME&NUMVARS; %END; RUN; %MEND MAKEFILE; /* NOW INVOKE THE MACRO! */ /* CHANGES ARE TO BE MADE HERE AS NEEDED. */ /* MAKE SURE THAT THE VARIABLES ARE IN THE ORDER YOU WANT */ /* AND ALSO IN THE DESIRED FORMAT. */ %MAKEFILE(DATASET=READIT, /* SAS DATASETNAME NAME */ FILENAME=WRITEIT, /* DDNAME OF THE FILE WRITTEN TO */ DLMR="|", /* LETS USE A PIPE */ QTES="NO", HEADER="YES", /* YEP - USE VARIABLE NAMES. */ LABEL="NO"); /* NOPE - WILL USE VARIABLE NAMES */ RUN;
... View more