I have a program that summarizes frequencies across variables. The variables are separate but use the same format. This is fake data but shows what I"m trying to do. It is essentially doing what I want but in FREQTABLE (which is the final table I'm looking for) I would prefer that the first column be the numerical variable showing the label instead of a text string because it currently gets sorted alphabetically instead of by the numerical value. I have other similar variables that I am re-using this for so I like that in the current program I don't have to explicitly state the variables throughout. I got a portion of this from another forum post. Hope this makes sense. Code: proc format; value city_name -1="Out of country" 1="Ann Arbor" 2="Newhaven" 3="Pittsburgh" 4="Richmond" 5="Tucson"; run; data city; input City_Q1 City_Q2 City_Q3 City_Q4 ; format City_Q1 city_name. City_Q2 city_name. City_Q3 city_name. City_Q4 city_name.; datalines; 1 1 2 2 2 1 1 3 4 3 3 3 5 2 -1 -1 2 5 5 5 ; run; /*This code is an example of how to generate a table with Variable Name, Variable Value, Frequency, Percent, Cumulative Freq and Cum Pct No macro's are required Use Proc Freq to generate the list, list variables in a table statement if only specific variables are desired Use ODS Table to capture the output and then format the output into a printable table. */ *Run frequency for tables; ods table onewayfreqs=temp; proc freq data=work.city; table _all_; run; *Format output; data want; length variable $32. variable_value $50.; set temp; Variable=scan(table, 2); Variable_Value=strip(trim(vvaluex(variable))); keep variable variable_value frequency percent cum:; label variable='Variable' variable_value='Variable Value'; run; PROC SORT DATA=WORK.WANT OUT=WORK.SORTTempTableSorted ; BY variable_value; RUN; PROC TRANSPOSE DATA=WORK.SORTTempTableSorted OUT=WORK.FREQTABLE /* PREFIX=Column */ NAME=Source LABEL=Label; BY variable_value; ID variable; VAR Frequency; RUN;
... View more