/***************************************************************** This program will add up to 6 ingredients for each medication listed on the 2013 NAMCS Public Use Data File along with Multum's therapeutic category for each ingredient. ******************************************************************/ OPTIONS MERGENOBY=ERROR MSGLEVEL=I; /* NOTE: THESE PATHS WILL NEED TO CHANGE DEPENDING ON WHERE DATA AND STATEMENTS ARE STORED ON COMPUTER OR NETWORK. PROGRAM IS CURRENTLY SET UP TO APPLY INGREDIENTS TO THE 2013 NAMCS PUBLIC USE FILE. THIS PROGRAM ASSUMES YOU ARE USING THE 2013 NAMCS SAS INPUT STATEMENT AVAILABLE AT THE AMBULATORY HEALTH CARE WEB SITE. (www.cdc.gov/nchs/namcs) PLEASE CONTACT THE AMBULATORY AND HOSPITAL CARE STATISTICS BRANCH AT 301-458-4600 IF YOU HAVE QUESTIONS. UPDATED 7.8.2016 */ FILENAME DRGINGR 'c:\temp\2013\drug_ingredients_2013.data'; *DRUG INGREDIENT FILE; FILENAME VIS 'c:\temp\2013\namcs2013'; *INPUT DATA FILE; FILENAME INPUT 'c:\temp\2013\nam13inp.txt'; *INPUT STATEMENT FOR INPUT DATA FILE; LIBNAME LIBOUT 'c:\temp\2013'; *PATH FOR OUTPUT DATASET; %LET VISOUT=NEWFILE; PROC DATASETS LIBRARY=WORK KILL; QUIT; * CREATING VISIT FILE; DATA VIS; INFILE VIS LRECL=9999 MISSOVER; %INC INPUT; RUN; * CREATING DRUG INGREDIENT FILE; data drging; INFILE DRGINGR LRECL=999 MISSOVER PAD; INPUT @001 DRUG_ID $CHAR6. @007 MEMBER1 $CHAR6. @013 MEMBER2 $CHAR6. @019 MEMBER3 $CHAR6. @025 MEMBER4 $CHAR6. @031 MEMBER5 $CHAR6. @037 MEMBER6 $CHAR6. @043 MEM1CAT1 $CHAR3. @046 MEM1CAT2 $CHAR3. @049 MEM1CAT3 $CHAR3. @052 MEM1CAT4 $CHAR3. @055 MEM2CAT1 $CHAR3. @058 MEM2CAT2 $CHAR3. @061 MEM2CAT3 $CHAR3. @064 MEM2CAT4 $CHAR3. @067 MEM3CAT1 $CHAR3. @070 MEM3CAT2 $CHAR3. @073 MEM3CAT3 $CHAR3. @076 MEM3CAT4 $CHAR3. @079 MEM4CAT1 $CHAR3. @082 MEM4CAT2 $CHAR3. @085 MEM4CAT3 $CHAR3. @088 MEM4CAT4 $CHAR3. @091 MEM5CAT1 $CHAR3. @094 MEM5CAT2 $CHAR3. @097 MEM5CAT3 $CHAR3. @100 MEM5CAT4 $CHAR3. @103 MEM6CAT1 $CHAR3. @106 MEM6CAT2 $CHAR3. @109 MEM6CAT3 $CHAR3. @112 MEM6CAT4 $CHAR3. ; run; data drging; set drging; length iddata $36 memall $72; iddata=member1||member2||member3||member4||member5||member6; memall= mem1cat1||mem1cat2||mem1cat3||mem1cat4|| mem2cat1||mem2cat2||mem2cat3||mem2cat4|| mem3cat1||mem3cat2||mem3cat3||mem3cat4|| mem4cat1||mem4cat2||mem4cat3||mem4cat4|| mem5cat1||mem5cat2||mem5cat3||mem5cat4|| mem6cat1||mem6cat2||mem6cat3||mem6cat4; run; * creating temporary format for member drug ids; data memform(keep=start label fmtname hlo); set drging end=eof; fmtname = '$IDDATA'; start = drug_id; label = iddata; output; if eof then do; label = 'NOMATCH'; hlo = 'O'; output; end; data memall(keep=start label fmtname); set drging; length label $72; fmtname = '$MEMALL'; start = drug_id; label = memall; PROC FORMAT CNTLIN=memform LIBRARY=WORK; run; proc format cntlin=memall library=work; run; * MERGING INGREDIENTS TO VISIT FILE; %macro adddata; data visingr; set vis; length memberdata $36 catdata $72; array meds(10) med1-med10; array drgid(10) drugid1-drugid10; array memberid(10,6)$6 drg1mem1-drg1mem6 drg2mem1-drg2mem6 drg3mem1-drg3mem6 drg4mem1-drg4mem6 drg5mem1-drg5mem6 drg6mem1-drg6mem6 drg7mem1-drg7mem6 drg8mem1-drg8mem6 drg9mem1-drg9mem6 drg10mem1-drg10mem6 ; array drg1(24) $3 drg1mem1cat1 drg1mem1cat2 drg1mem1cat3 drg1mem1cat4 drg1mem2cat1 drg1mem2cat2 drg1mem2cat3 drg1mem2cat4 drg1mem3cat1 drg1mem3cat2 drg1mem3cat3 drg1mem3cat4 drg1mem4cat1 drg1mem4cat2 drg1mem4cat3 drg1mem4cat4 drg1mem5cat1 drg1mem5cat2 drg1mem5cat3 drg1mem5cat4 drg1mem6cat1 drg1mem6cat2 drg1mem6cat3 drg1mem6cat4; array drg2(24) $3 drg2mem1cat1 drg2mem1cat2 drg2mem1cat3 drg2mem1cat4 drg2mem2cat1 drg2mem2cat2 drg2mem2cat3 drg2mem2cat4 drg2mem3cat1 drg2mem3cat2 drg2mem3cat3 drg2mem3cat4 drg2mem4cat1 drg2mem4cat2 drg2mem4cat3 drg2mem4cat4 drg2mem5cat1 drg2mem5cat2 drg2mem5cat3 drg2mem5cat4 drg2mem6cat1 drg2mem6cat2 drg2mem6cat3 drg2mem6cat4; array drg3(24) $3 drg3mem1cat1 drg3mem1cat2 drg3mem1cat3 drg3mem1cat4 drg3mem2cat1 drg3mem2cat2 drg3mem2cat3 drg3mem2cat4 drg3mem3cat1 drg3mem3cat2 drg3mem3cat3 drg3mem3cat4 drg3mem4cat1 drg3mem4cat2 drg3mem4cat3 drg3mem4cat4 drg3mem5cat1 drg3mem5cat2 drg3mem5cat3 drg3mem5cat4 drg3mem6cat1 drg3mem6cat2 drg3mem6cat3 drg3mem6cat4; array drg4(24) $3 drg4mem1cat1 drg4mem1cat2 drg4mem1cat3 drg4mem1cat4 drg4mem2cat1 drg4mem2cat2 drg4mem2cat3 drg4mem2cat4 drg4mem3cat1 drg4mem3cat2 drg4mem3cat3 drg4mem3cat4 drg4mem4cat1 drg4mem4cat2 drg4mem4cat3 drg4mem4cat4 drg4mem5cat1 drg4mem5cat2 drg4mem5cat3 drg4mem5cat4 drg4mem6cat1 drg4mem6cat2 drg4mem6cat3 drg4mem6cat4; array drg5(24) $3 drg5mem1cat1 drg5mem1cat2 drg5mem1cat3 drg5mem1cat4 drg5mem2cat1 drg5mem2cat2 drg5mem2cat3 drg5mem2cat4 drg5mem3cat1 drg5mem3cat2 drg5mem3cat3 drg5mem3cat4 drg5mem4cat1 drg5mem4cat2 drg5mem4cat3 drg5mem4cat4 drg5mem5cat1 drg5mem5cat2 drg5mem5cat3 drg5mem5cat4 drg5mem6cat1 drg5mem6cat2 drg5mem6cat3 drg5mem6cat4; array drg6(24) $3 drg6mem1cat1 drg6mem1cat2 drg6mem1cat3 drg6mem1cat4 drg6mem2cat1 drg6mem2cat2 drg6mem2cat3 drg6mem2cat4 drg6mem3cat1 drg6mem3cat2 drg6mem3cat3 drg6mem3cat4 drg6mem4cat1 drg6mem4cat2 drg6mem4cat3 drg6mem4cat4 drg6mem5cat1 drg6mem5cat2 drg6mem5cat3 drg6mem5cat4 drg6mem6cat1 drg6mem6cat2 drg6mem6cat3 drg6mem6cat4; array drg7(24) $3 drg7mem1cat1 drg7mem1cat2 drg7mem1cat3 drg7mem1cat4 drg7mem2cat1 drg7mem2cat2 drg7mem2cat3 drg7mem2cat4 drg7mem3cat1 drg7mem3cat2 drg7mem3cat3 drg7mem3cat4 drg7mem4cat1 drg7mem4cat2 drg7mem4cat3 drg7mem4cat4 drg7mem5cat1 drg7mem5cat2 drg7mem5cat3 drg7mem5cat4 drg7mem6cat1 drg7mem6cat2 drg7mem6cat3 drg7mem6cat4; array drg8(24) $3 drg8mem1cat1 drg8mem1cat2 drg8mem1cat3 drg8mem1cat4 drg8mem2cat1 drg8mem2cat2 drg8mem2cat3 drg8mem2cat4 drg8mem3cat1 drg8mem3cat2 drg8mem3cat3 drg8mem3cat4 drg8mem4cat1 drg8mem4cat2 drg8mem4cat3 drg8mem4cat4 drg8mem5cat1 drg8mem5cat2 drg8mem5cat3 drg8mem5cat4 drg8mem6cat1 drg8mem6cat2 drg8mem6cat3 drg8mem6cat4; array drg9(24) $3 drg9mem1cat1 drg9mem1cat2 drg9mem1cat3 drg9mem1cat4 drg9mem2cat1 drg9mem2cat2 drg9mem2cat3 drg9mem2cat4 drg9mem3cat1 drg9mem3cat2 drg9mem3cat3 drg9mem3cat4 drg9mem4cat1 drg9mem4cat2 drg9mem4cat3 drg9mem4cat4 drg9mem5cat1 drg9mem5cat2 drg9mem5cat3 drg9mem5cat4 drg9mem6cat1 drg9mem6cat2 drg9mem6cat3 drg9mem6cat4; array drg10(24) $3 drg10mem1cat1 drg10mem1cat2 drg10mem1cat3 drg10mem1cat4 drg10mem2cat1 drg10mem2cat2 drg10mem2cat3 drg10mem2cat4 drg10mem3cat1 drg10mem3cat2 drg10mem3cat3 drg10mem3cat4 drg10mem4cat1 drg10mem4cat2 drg10mem4cat3 drg10mem4cat4 drg10mem5cat1 drg10mem5cat2 drg10mem5cat3 drg10mem5cat4 drg10mem6cat1 drg10mem6cat2 drg10mem6cat3 drg10mem6cat4; %do i=1 %to 10; if meds(&i) not in ('-9' '90000' '88888') then do; memberdata = put(drgid(&i), $IDDATA.); catdata = put(drgid(&i),$MEMALL.); if memberdata = 'NOMATCH' then do; put 'NO MATCH FOR DRUG ID CODE,MISSING DRUG ID ' drgid(&i)=; end; do j = 1 to 6; memberid(&i,j)= substr(memberdata,((6*j)-5),6); end; do k = 1 to 24; drg&i(k)=substr(catdata,((3*k)-2),3); end; end; %end; drop j k memberdata catdata; run; %mend; %adddata; DATA LIBOUT.&VISOUT; SET VISINGR; RUN; proc contents data=libout.newfile; run;