I am not entirely sure what you are after, given that you have not included an example of your desired outcome, or initial data. I created the following some time ago, which you might find useful. By using the ODS output you are able to concatenate the results of PROC FREQ in one simple step. I hope it is useful in achieving your goal. DATA HAVE; INFILE DATALINES DELIMITER="," TRUNCOVER DSD; LENGTH DOCUMENTATION_VV $32. OCCUPANCY_VV $32. PROPERTY_VV $32. PURPOSE_VV $32.; INPUT DOCUMENTATION_INVALID DOCUMENTATION_VV $ OCCUPANCY_INVALID OCCUPANCY_VV $ PROPERTY_INVALID PROPERTY_VV $ PURPOSE_INVALID PURPOSE_VV $; DATALINES; 0,"FULL, SUB, VOI/VOA, NODOC, QUICK",0,"OWNER, 2NDHOME, INVESTOR",1,"SF, MF, TOWNHOUSE, CONDO",0,"PURCHASE, CASHOUT, RATE/TERM" 0,"FULL, SUB, VOI/VOA, NODOC, QUICK",1,"OWNER, 2NDHOME, INVESTOR",0,"SF, MF, TOWNHOUSE, CONDO",1,"PURCHASE, CASHOUT, RATE/TERM" 0,"FULL, SUB, VOI/VOA, NODOC, QUICK",0,"OWNER, 2NDHOME, INVESTOR",0,"SF, MF, TOWNHOUSE, CONDO",0,"PURCHASE, CASHOUT, RATE/TERM" 0,"FULL, SUB, VOI/VOA, NODOC, QUICK",0,"OWNER, 2NDHOME, INVESTOR",0,"SF, MF, TOWNHOUSE, CONDO",0,"PURCHASE, CASHOUT, RATE/TERM" 1,"FULL, SUB, VOI/VOA, NODOC, QUICK",0,"OWNER, 2NDHOME, INVESTOR",0,"SF, MF, TOWNHOUSE, CONDO",1,"PURCHASE, CASHOUT, RATE/TERM" 0,"FULL, SUB, VOI/VOA, NODOC, QUICK",1,"OWNER, 2NDHOME, INVESTOR",0,"SF, MF, TOWNHOUSE, CONDO",0,"PURCHASE, CASHOUT, RATE/TERM" ; RUN; ODS OUTPUT ONEWAYFREQS=WORK.OWF (DROP = F_: RENAME = (FREQUENCY = COUNT)); PROC FREQ DATA=HAVE; BY DOCUMENTATION_VV OCCUPANCY_VV PROPERTY_VV PURPOSE_VV; TABLES DOCUMENTATION_INVALID OCCUPANCY_INVALID PROPERTY_INVALID PURPOSE_INVALID /NOCUM NOPERCENT ; RUN; ODS OUTPUT CLOSE; DATA TRANSFORM (KEEP = VAL_INVAL VARIABLE VALID_VALUES DOCUMENTATION_VV COUNT); LENGTH VAL_INVAL $7. VARIABLE $21.; VAL_INVAL = "VALID"; SET OWF; BY TABLE; IF DOCUMENTATION_INVALID = 1 THEN VAL_INVAL = "INVALID"; ELSE IF OCCUPANCY_INVALID = 1 THEN VAL_INVAL = "INVALID"; ELSE IF PROPERTY_INVALID = 1 THEN VAL_INVAL = "INVALID"; ELSE IF PURPOSE_INVALID = 1 THEN VAL_INVAL = "INVALID"; VARIABLE = SCAN(TABLE,-1); IF VARIABLE = "DOCUMENTATION_INVALID" THEN VALID_VALUES = DOCUMENTATION_VV; ELSE IF VARIABLE = "OCCUPANCY_INVALID" THEN VALID_VALUES = OCCUPANCY_VV; ELSE IF VARIABLE = "PROPERTY_INVALID" THEN VALID_VALUES = PROPERTY_VV; ELSE IF VARIABLE = "PURPOSE_INVALID" THEN VALID_VALUES = PURPOSE_VV; OUTPUT; IF FIRST.TABLE THEN TOTAL = COUNT; ELSE TOTAL+COUNT; IF LAST.TABLE THEN DO; COUNT = TOTAL; VAL_INVAL = "TOTAL"; OUTPUT; END; RUN; PROC TRANSPOSE DATA = TRANSFORM OUT=TRANS (DROP = DOCUMENTATION_VV _:) SUFFIX=_COUNT; ID VAL_INVAL ; BY VARIABLE VALID_VALUES DOCUMENTATION_VV NOTSORTED; VAR COUNT; RUN;
... View more