<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Macro Usage in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94053#M19827</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is the code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;This macro creates a table of&lt;BR /&gt;charateristics for the variables listed. &lt;BR /&gt;&lt;BR /&gt;It handles categorical, binary and continuous variables and produces and output&lt;BR /&gt;dataset that can be further customized. No statistical information is&lt;BR /&gt;&lt;BR /&gt;included in this analysis&lt;BR /&gt;&lt;BR /&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/*Parameters to be set:&lt;BR /&gt;&lt;BR /&gt;dsetin - name of dataset to be analyzed&lt;BR /&gt;&lt;BR /&gt;cont = macro variable list of variable names, ie cont=age weight height&lt;BR /&gt;&lt;BR /&gt;cat=list of categorical variables ie cat=sex grade&lt;BR /&gt;&lt;BR /&gt;bin=binary variables, such as smoking now, smoking ever&lt;BR /&gt;&lt;BR /&gt;dsetout=name of output dataset&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;Run example at the end for a&lt;BR /&gt;sample output dataset call sample_table_char in the work directory.&lt;BR /&gt;&lt;BR /&gt;Based on the user formatting the variables the way the results should be and&lt;BR /&gt;with appropriate labels for variable names.&lt;BR /&gt;&lt;BR /&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;*options mprint symbolgen;&lt;BR /&gt;&lt;BR /&gt;%macro table_char(dsetin, cont, cat, bin, dsetout);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;*delete old dataset;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete &amp;amp;dsetout;&lt;BR /&gt;&lt;BR /&gt;quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/****************************************************************&lt;BR /&gt;&lt;BR /&gt;Handle Categorical Variables&lt;BR /&gt;&lt;BR /&gt;****************************************************************/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*loop through variable list;&lt;BR /&gt;&lt;BR /&gt;%let i=1;&lt;BR /&gt;&lt;BR /&gt;%do %while (%scan(&amp;amp;cat, &amp;amp;i, " ") ^=%str());&lt;BR /&gt;&lt;BR /&gt;%let var=%scan(&amp;amp;cat, &amp;amp;i, " "); &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Get format for variable;&lt;BR /&gt;&lt;BR /&gt;data _null_;&lt;BR /&gt;&lt;BR /&gt;set &amp;amp;dsetin;&lt;BR /&gt;&lt;BR /&gt;call symput("var_fmt", vformat(&amp;amp;var));&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc freq data=&amp;amp;dsetin&lt;BR /&gt;noprint;&lt;BR /&gt;&lt;BR /&gt;table &amp;amp;var/missing out=tab_var;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;data temp1;&lt;BR /&gt;&lt;BR /&gt;length categorical $200.; format categorical $200.;&lt;BR /&gt;&lt;BR /&gt;length value $200.; format value $200.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;set tab_var;&lt;BR /&gt;&lt;BR /&gt;percent=percent/100;&lt;BR /&gt;&lt;BR /&gt;categorical=put(&amp;amp;var., &amp;amp;var_fmt.);&lt;BR /&gt;&lt;BR /&gt;if _n_=1 then do;&lt;BR /&gt;&lt;BR /&gt;value=put(count, 8.)||"("||compress(put(percent,&lt;BR /&gt;percent8.1))||")";&lt;BR /&gt;&lt;BR /&gt;order=2;&lt;BR /&gt;&lt;BR /&gt;output;&lt;BR /&gt;&lt;BR /&gt;order=1;&lt;BR /&gt;&lt;BR /&gt;value='';&lt;BR /&gt;&lt;BR /&gt;categorical=propcase(vlabel(&amp;amp;var.));&lt;BR /&gt;&lt;BR /&gt;output;&lt;BR /&gt;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;else do;&lt;BR /&gt;&lt;BR /&gt;order=2;&lt;BR /&gt;&lt;BR /&gt;value=put(count, 8.)||"("||compress(put(percent, percent8.1))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;keep categorical value order;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc sort data=temp1&lt;BR /&gt;out=temp2 (drop=order); by order categorical; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;proc append base=&amp;amp;dsetout data=temp2;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*clean up;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete tab_var temp1 temp2;&lt;BR /&gt;&lt;BR /&gt;run; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Increment counter;&lt;BR /&gt;&lt;BR /&gt;%let i=%eval(&amp;amp;i+1);&lt;BR /&gt;&lt;BR /&gt;%end; *Categorical;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/****************************************************************&lt;BR /&gt;&lt;BR /&gt;Handle Continuous Variables&lt;BR /&gt;&lt;BR /&gt;****************************************************************/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%let i=1;&lt;BR /&gt;&lt;BR /&gt;%do %while (%scan(&amp;amp;cont, &amp;amp;i, " ") ^=%str());&lt;BR /&gt;&lt;BR /&gt;%let var=%scan(&amp;amp;cont, &amp;amp;i, " "); &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc means data=&amp;amp;dsetin&lt;BR /&gt;(rename=&amp;amp;var=vn) noprint;&lt;BR /&gt;&lt;BR /&gt;var vn;&lt;BR /&gt;&lt;BR /&gt;output out=table_var n= nmiss= mean= min= max= std= median= p25= p75=&lt;BR /&gt;p90=/autoname;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*get label of variable for&lt;BR /&gt;clean reporting;&lt;BR /&gt;&lt;BR /&gt;data _null_;&lt;BR /&gt;&lt;BR /&gt;set &amp;amp;dsetin;&lt;BR /&gt;&lt;BR /&gt;call symput("var_label", vlabel(&amp;amp;var));&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;data temp1;&lt;BR /&gt;&lt;BR /&gt;length categorical $200.; format categorical $200.;&lt;BR /&gt;&lt;BR /&gt;format value $200.; length value $200.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;set table_var;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical="&amp;amp;var_label.";&lt;BR /&gt;&lt;BR /&gt;value=.;&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Count(Missing)';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_n, 5.)||"("||compress(put(vn_nmiss,&lt;BR /&gt;5.))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Mean (SD)';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_mean, 8.1)||"("||compress(put(vn_stddev,&lt;BR /&gt;8.1))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Median (IQR)';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_median, 8.1)||"("||compress(put(vn_p25,&lt;BR /&gt;8.1))||" - "||compress(put(vn_p75, 8.1))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Range';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_min, 8.1)||" - "||compress(put(vn_max, 8.1));&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='90th&lt;BR /&gt;Percentile';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_p90, 8.1);&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;keep categorical value;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;proc append base=&amp;amp;dsetout data=temp1;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*clean up;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete table_var temp1;&lt;BR /&gt;&lt;BR /&gt;run; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Increment counter;&lt;BR /&gt;&lt;BR /&gt;%let i=%eval(&amp;amp;i+1);&lt;BR /&gt;&lt;BR /&gt;%end; *Continuous;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/*****************************************************************&lt;BR /&gt;&lt;BR /&gt;Handle Binary Variables (only report 1s)&lt;BR /&gt;&lt;BR /&gt;*****************************************************************/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%let i=1;&lt;BR /&gt;&lt;BR /&gt;%do %while (%scan(&amp;amp;bin, &amp;amp;i, " ") ^=%str());&lt;BR /&gt;&lt;BR /&gt;%let var=%scan(&amp;amp;bin, &amp;amp;i, " "); &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc freq data=&amp;amp;dsetin&lt;BR /&gt;noprint;&lt;BR /&gt;&lt;BR /&gt;table &amp;amp;var/missing out=tab_var;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;data tab_var;&lt;BR /&gt;&lt;BR /&gt;set tab_var;&lt;BR /&gt;&lt;BR /&gt;where &amp;amp;var=1;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;data temp1;&lt;BR /&gt;&lt;BR /&gt;length categorical $200.; format categorical $200.;&lt;BR /&gt;&lt;BR /&gt;length value $200.; format value $200.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;set tab_var;&lt;BR /&gt;&lt;BR /&gt;percent=percent/100;&lt;BR /&gt;&lt;BR /&gt;if _n_=1 then do;&lt;BR /&gt;&lt;BR /&gt;value=put(count, 8.)||"("||compress(put(percent,&lt;BR /&gt;percent8.1))||")";&lt;BR /&gt;&lt;BR /&gt;order=1;&lt;BR /&gt;&lt;BR /&gt;categorical=propcase(vlabel(&amp;amp;var.));&lt;BR /&gt;&lt;BR /&gt;output;&lt;BR /&gt;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;keep categorical value;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;proc append base=&amp;amp;dsetout data=temp1;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*clean up;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete tab_var temp1;&lt;BR /&gt;&lt;BR /&gt;run; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Increment counter;&lt;BR /&gt;&lt;BR /&gt;%let i=%eval(&amp;amp;i+1);&lt;BR /&gt;&lt;BR /&gt;%end;*Binary;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%mend table_char;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%table_char(sample, height weight age, sex age, female, sample_table_char);&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 13 Oct 2012 01:35:40 GMT</pubDate>
    <dc:creator>robertrao</dc:creator>
    <dc:date>2012-10-13T01:35:40Z</dc:date>
    <item>
      <title>Macro Usage</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94052#M19826</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hi Team,&lt;/P&gt;&lt;P&gt;I have a Macro but I am not knowing how to use it in this kind of situation.&lt;/P&gt;&lt;P&gt;The difference I am not getting is that how can I get Means side by side for example: &lt;STRONG&gt;type b&lt;/STRONG&gt; &lt;STRONG&gt;type h&lt;/STRONG&gt; and &lt;STRONG&gt;typec&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;i am able to get the result if any one variable is present but here three variables are side by side for which we have to produce Means and freqs..&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;I will post the code&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Also how do I get the Total variable twiceone is a subtotal and the other is a grand total&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;THANKS&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type(b/h)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; typec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TOTAL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Age, years&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n=?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n=?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n= ?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n=?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n=?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Mean (SD)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 46(13)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34(5)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Median&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Min-Max&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13-45&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 45-60&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;BMI&lt;/P&gt;&lt;P&gt;Mean (SD)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Median&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Min-Max&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Diabetes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Smoking&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;current&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40(40%)&amp;nbsp;&amp;nbsp; 60(60%)&lt;/P&gt;&lt;P&gt;Former&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60(60%)&amp;nbsp;&amp;nbsp;&amp;nbsp; 40(40%)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Gender&lt;/P&gt;&lt;P&gt;Male&lt;/P&gt;&lt;P&gt;Female&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;HTN&lt;/P&gt;&lt;P&gt;yes&lt;/P&gt;&lt;P&gt;no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 13 Oct 2012 01:25:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94052#M19826</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2012-10-13T01:25:31Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Usage</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94053#M19827</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is the code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;This macro creates a table of&lt;BR /&gt;charateristics for the variables listed. &lt;BR /&gt;&lt;BR /&gt;It handles categorical, binary and continuous variables and produces and output&lt;BR /&gt;dataset that can be further customized. No statistical information is&lt;BR /&gt;&lt;BR /&gt;included in this analysis&lt;BR /&gt;&lt;BR /&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/*Parameters to be set:&lt;BR /&gt;&lt;BR /&gt;dsetin - name of dataset to be analyzed&lt;BR /&gt;&lt;BR /&gt;cont = macro variable list of variable names, ie cont=age weight height&lt;BR /&gt;&lt;BR /&gt;cat=list of categorical variables ie cat=sex grade&lt;BR /&gt;&lt;BR /&gt;bin=binary variables, such as smoking now, smoking ever&lt;BR /&gt;&lt;BR /&gt;dsetout=name of output dataset&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;Run example at the end for a&lt;BR /&gt;sample output dataset call sample_table_char in the work directory.&lt;BR /&gt;&lt;BR /&gt;Based on the user formatting the variables the way the results should be and&lt;BR /&gt;with appropriate labels for variable names.&lt;BR /&gt;&lt;BR /&gt;*/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;*options mprint symbolgen;&lt;BR /&gt;&lt;BR /&gt;%macro table_char(dsetin, cont, cat, bin, dsetout);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;*delete old dataset;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete &amp;amp;dsetout;&lt;BR /&gt;&lt;BR /&gt;quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/****************************************************************&lt;BR /&gt;&lt;BR /&gt;Handle Categorical Variables&lt;BR /&gt;&lt;BR /&gt;****************************************************************/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*loop through variable list;&lt;BR /&gt;&lt;BR /&gt;%let i=1;&lt;BR /&gt;&lt;BR /&gt;%do %while (%scan(&amp;amp;cat, &amp;amp;i, " ") ^=%str());&lt;BR /&gt;&lt;BR /&gt;%let var=%scan(&amp;amp;cat, &amp;amp;i, " "); &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Get format for variable;&lt;BR /&gt;&lt;BR /&gt;data _null_;&lt;BR /&gt;&lt;BR /&gt;set &amp;amp;dsetin;&lt;BR /&gt;&lt;BR /&gt;call symput("var_fmt", vformat(&amp;amp;var));&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc freq data=&amp;amp;dsetin&lt;BR /&gt;noprint;&lt;BR /&gt;&lt;BR /&gt;table &amp;amp;var/missing out=tab_var;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;data temp1;&lt;BR /&gt;&lt;BR /&gt;length categorical $200.; format categorical $200.;&lt;BR /&gt;&lt;BR /&gt;length value $200.; format value $200.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;set tab_var;&lt;BR /&gt;&lt;BR /&gt;percent=percent/100;&lt;BR /&gt;&lt;BR /&gt;categorical=put(&amp;amp;var., &amp;amp;var_fmt.);&lt;BR /&gt;&lt;BR /&gt;if _n_=1 then do;&lt;BR /&gt;&lt;BR /&gt;value=put(count, 8.)||"("||compress(put(percent,&lt;BR /&gt;percent8.1))||")";&lt;BR /&gt;&lt;BR /&gt;order=2;&lt;BR /&gt;&lt;BR /&gt;output;&lt;BR /&gt;&lt;BR /&gt;order=1;&lt;BR /&gt;&lt;BR /&gt;value='';&lt;BR /&gt;&lt;BR /&gt;categorical=propcase(vlabel(&amp;amp;var.));&lt;BR /&gt;&lt;BR /&gt;output;&lt;BR /&gt;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;else do;&lt;BR /&gt;&lt;BR /&gt;order=2;&lt;BR /&gt;&lt;BR /&gt;value=put(count, 8.)||"("||compress(put(percent, percent8.1))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;keep categorical value order;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc sort data=temp1&lt;BR /&gt;out=temp2 (drop=order); by order categorical; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;proc append base=&amp;amp;dsetout data=temp2;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*clean up;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete tab_var temp1 temp2;&lt;BR /&gt;&lt;BR /&gt;run; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Increment counter;&lt;BR /&gt;&lt;BR /&gt;%let i=%eval(&amp;amp;i+1);&lt;BR /&gt;&lt;BR /&gt;%end; *Categorical;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/****************************************************************&lt;BR /&gt;&lt;BR /&gt;Handle Continuous Variables&lt;BR /&gt;&lt;BR /&gt;****************************************************************/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%let i=1;&lt;BR /&gt;&lt;BR /&gt;%do %while (%scan(&amp;amp;cont, &amp;amp;i, " ") ^=%str());&lt;BR /&gt;&lt;BR /&gt;%let var=%scan(&amp;amp;cont, &amp;amp;i, " "); &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc means data=&amp;amp;dsetin&lt;BR /&gt;(rename=&amp;amp;var=vn) noprint;&lt;BR /&gt;&lt;BR /&gt;var vn;&lt;BR /&gt;&lt;BR /&gt;output out=table_var n= nmiss= mean= min= max= std= median= p25= p75=&lt;BR /&gt;p90=/autoname;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*get label of variable for&lt;BR /&gt;clean reporting;&lt;BR /&gt;&lt;BR /&gt;data _null_;&lt;BR /&gt;&lt;BR /&gt;set &amp;amp;dsetin;&lt;BR /&gt;&lt;BR /&gt;call symput("var_label", vlabel(&amp;amp;var));&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;data temp1;&lt;BR /&gt;&lt;BR /&gt;length categorical $200.; format categorical $200.;&lt;BR /&gt;&lt;BR /&gt;format value $200.; length value $200.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;set table_var;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical="&amp;amp;var_label.";&lt;BR /&gt;&lt;BR /&gt;value=.;&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Count(Missing)';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_n, 5.)||"("||compress(put(vn_nmiss,&lt;BR /&gt;5.))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Mean (SD)';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_mean, 8.1)||"("||compress(put(vn_stddev,&lt;BR /&gt;8.1))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Median (IQR)';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_median, 8.1)||"("||compress(put(vn_p25,&lt;BR /&gt;8.1))||" - "||compress(put(vn_p75, 8.1))||")";&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='Range';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_min, 8.1)||" - "||compress(put(vn_max, 8.1));&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;categorical='90th&lt;BR /&gt;Percentile';&lt;BR /&gt;&lt;BR /&gt;value=put(vn_p90, 8.1);&lt;BR /&gt;&lt;BR /&gt;output;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;keep categorical value;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;proc append base=&amp;amp;dsetout data=temp1;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*clean up;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete table_var temp1;&lt;BR /&gt;&lt;BR /&gt;run; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Increment counter;&lt;BR /&gt;&lt;BR /&gt;%let i=%eval(&amp;amp;i+1);&lt;BR /&gt;&lt;BR /&gt;%end; *Continuous;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;/*****************************************************************&lt;BR /&gt;&lt;BR /&gt;Handle Binary Variables (only report 1s)&lt;BR /&gt;&lt;BR /&gt;*****************************************************************/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%let i=1;&lt;BR /&gt;&lt;BR /&gt;%do %while (%scan(&amp;amp;bin, &amp;amp;i, " ") ^=%str());&lt;BR /&gt;&lt;BR /&gt;%let var=%scan(&amp;amp;bin, &amp;amp;i, " "); &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc freq data=&amp;amp;dsetin&lt;BR /&gt;noprint;&lt;BR /&gt;&lt;BR /&gt;table &amp;amp;var/missing out=tab_var;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;data tab_var;&lt;BR /&gt;&lt;BR /&gt;set tab_var;&lt;BR /&gt;&lt;BR /&gt;where &amp;amp;var=1;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;data temp1;&lt;BR /&gt;&lt;BR /&gt;length categorical $200.; format categorical $200.;&lt;BR /&gt;&lt;BR /&gt;length value $200.; format value $200.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;set tab_var;&lt;BR /&gt;&lt;BR /&gt;percent=percent/100;&lt;BR /&gt;&lt;BR /&gt;if _n_=1 then do;&lt;BR /&gt;&lt;BR /&gt;value=put(count, 8.)||"("||compress(put(percent,&lt;BR /&gt;percent8.1))||")";&lt;BR /&gt;&lt;BR /&gt;order=1;&lt;BR /&gt;&lt;BR /&gt;categorical=propcase(vlabel(&amp;amp;var.));&lt;BR /&gt;&lt;BR /&gt;output;&lt;BR /&gt;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;keep categorical value;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;&lt;BR /&gt;&lt;BR /&gt;proc append base=&amp;amp;dsetout data=temp1;&lt;BR /&gt;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*clean up;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;proc datasets nodetails&lt;BR /&gt;nolist;&lt;BR /&gt;&lt;BR /&gt;delete tab_var temp1;&lt;BR /&gt;&lt;BR /&gt;run; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;*Increment counter;&lt;BR /&gt;&lt;BR /&gt;%let i=%eval(&amp;amp;i+1);&lt;BR /&gt;&lt;BR /&gt;%end;*Binary;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%mend table_char;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Arial','sans-serif';"&gt;%table_char(sample, height weight age, sex age, female, sample_table_char);&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 13 Oct 2012 01:35:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94053#M19827</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2012-10-13T01:35:40Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Usage</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94054#M19828</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI Team&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;b h and c types are under the same variable&lt;/P&gt;&lt;P&gt;DO I need to subset b and c first with a where condition and use a class stmnt in the proc means and another proc means separately for typec? And merge themm both&lt;/P&gt;&lt;P&gt;I &lt;/P&gt;&lt;P&gt;AM confused&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;THanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 13 Oct 2012 15:11:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Usage/m-p/94054#M19828</guid>
      <dc:creator>robertrao</dc:creator>
      <dc:date>2012-10-13T15:11:08Z</dc:date>
    </item>
  </channel>
</rss>

