<?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 Is there any macro to check percentage of missing values in a dataset in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9212#M436</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can create a format for missing based on numeric and character variables and run proc freq. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;value $ missfmt ' '="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;value nmissfmt . ="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;format _numeric_ nmissfmt. _character_ $missfmt.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc freq data=have;&lt;/P&gt;&lt;P&gt;run;&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;But here's my macro. It needs work since I chopped it together from another macro I use, so not all the code in here is actually required. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro sum_missing(libname, dsetin, dsetout);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Delete old dataset;&lt;/P&gt;&lt;P&gt;proc datasets nodetails nolist;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete &amp;amp;dsetout;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Upcase all macro variables to have consistency;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput ("libname", put(upcase("&amp;amp;libname."), $8.));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput ("dsetin", put(upcase("&amp;amp;dsetin."), $32.));&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Formats for missing for character and numeric variables;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;value $ missfmt ' '="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;value nmissfmt . ="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&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;*Copy dataset and apply missing formats to it;&lt;/P&gt;&lt;P&gt;data step1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname..&amp;amp;dsetin;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; format _character_ $missfmt. _numeric_ nmissfmt.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;options mprint symbolgen;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Get variable list;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&amp;nbsp; into : var_list separated by " "&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where upcase(libname) ="&amp;amp;libname"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and upcase(memname)="&amp;amp;dsetin";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *Get count of total number of observations into macro variable;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into : obs_count&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from &amp;amp;libname..&amp;amp;dsetin.;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Start looping through the variable list here;&lt;/P&gt;&lt;P&gt;%let i=1;&lt;/P&gt;&lt;P&gt;%do %while (%scan(&amp;amp;var_list, &amp;amp;i, " ") ^=%str());&lt;/P&gt;&lt;P&gt;%let var=%scan(&amp;amp;var_list, &amp;amp;i, " ");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Get format of missing;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt; set step1;&lt;/P&gt;&lt;P&gt; call symput("var_fmt", vformat(&amp;amp;var));&lt;/P&gt;&lt;P&gt; call symput("var_label", vlabel(&amp;amp;var));&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Get count of missing;&lt;/P&gt;&lt;P&gt;proc freq data=step1 noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; table &amp;amp;var/missing out=cross_tab1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data cross_tab2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set cross_tab1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; length variable $50.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; category=put(&amp;amp;var, &amp;amp;var_fmt.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; variable="&amp;amp;var_label.";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_=1 and category='Not Missing' then do;;&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; Number_Missing=&amp;amp;obs_count-count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Percent_Missing=Number_Missing/&amp;amp;obs_count.;&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; percent=percent/100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if _n_=1 and category='Missing' then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Missing=count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Percent_Missing=percent/100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&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; format percent: percent10.1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep variable Number_Missing Percent_Missing;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc append base=&amp;amp;dsetout data=cross_tab2 force;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc datasets nodetails nolist;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete cross_tab1 cross_tab2;&lt;/P&gt;&lt;P&gt;run; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Increment counter;&lt;/P&gt;&lt;P&gt;%let i=%eval(&amp;amp;i+1);&lt;/P&gt;&lt;P&gt;%end; *Categorical;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc datasets nodetails nolist;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete step1;&lt;/P&gt;&lt;P&gt;run; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 21 Feb 2012 19:04:29 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2012-02-21T19:04:29Z</dc:date>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9209#M433</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Just feel curious. Thanks. If you have, can you post it here? &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 18:35:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9209#M433</guid>
      <dc:creator>Ruth</dc:creator>
      <dc:date>2012-02-21T18:35:09Z</dc:date>
    </item>
    <item>
      <title>Re: Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9210#M434</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ruth,&lt;/P&gt;&lt;P&gt;I am sure there must be better approaches, I am here just to start the discussion. following code will only work one variable at a time, but by tweaking it, it could also work on multiple variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA have;&lt;/P&gt;&lt;P&gt;infile cards;&lt;/P&gt;&lt;P&gt;input a @@;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 . 2 . 3 4 5 6 7 . 8 . 9&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro mpcnt (dat=, var=);&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;set &amp;amp;dat end=last nobs=nobs;&lt;/P&gt;&lt;P&gt;if missing(&amp;amp;var) then _n+1;&lt;/P&gt;&lt;P&gt;if last then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _p= _n/nobs;&lt;/P&gt;&lt;P&gt; put "percent=" _p percent7.2 ;&lt;/P&gt;&lt;P&gt; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mpcnt (dat=have,var=a)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Or for SQL solution,&lt;/P&gt;&lt;P&gt;%macro sql_pcnt (dat=, var=);&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;select sum(missing(&amp;amp;var))/count(*) as Missing_percent format percent7.2&lt;/P&gt;&lt;P&gt;from &amp;amp;dat;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%sql_pcnt (dat=have,var=a)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope you can have some taste of the logic and work out some solution for your real life data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 18:55:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9210#M434</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-02-21T18:55:49Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9211#M435</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ruth,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I imagine there's not much out there in the way of macros, because SAS handles the problem easily enough without macros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you can work with the number (instead of percentage) of missing values, it's as easy as this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc means data=mydata maxdec=0 nmiss;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you really must have percentages, then create an output data set:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc means data=mydata noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; var _numeric_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; output out=missings (drop=_type_) nmiss=;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In your output data set MISSINGS, each variable name will contain the number of observations that the original variable was missing.&amp;nbsp; You will also have the automatic variable _FREQ_, which is the total number of observations.&amp;nbsp; If you bring this into a DATA step, it will be easy enough to calculate the percentages.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 19:02:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9211#M435</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2012-02-21T19:02:08Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9212#M436</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can create a format for missing based on numeric and character variables and run proc freq. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;value $ missfmt ' '="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;value nmissfmt . ="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;format _numeric_ nmissfmt. _character_ $missfmt.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc freq data=have;&lt;/P&gt;&lt;P&gt;run;&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;But here's my macro. It needs work since I chopped it together from another macro I use, so not all the code in here is actually required. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro sum_missing(libname, dsetin, dsetout);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Delete old dataset;&lt;/P&gt;&lt;P&gt;proc datasets nodetails nolist;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete &amp;amp;dsetout;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Upcase all macro variables to have consistency;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput ("libname", put(upcase("&amp;amp;libname."), $8.));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput ("dsetin", put(upcase("&amp;amp;dsetin."), $32.));&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Formats for missing for character and numeric variables;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;value $ missfmt ' '="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;value nmissfmt . ="Missing"&lt;/P&gt;&lt;P&gt;other="Not Missing"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&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;*Copy dataset and apply missing formats to it;&lt;/P&gt;&lt;P&gt;data step1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;libname..&amp;amp;dsetin;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; format _character_ $missfmt. _numeric_ nmissfmt.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;options mprint symbolgen;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Get variable list;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&amp;nbsp; into : var_list separated by " "&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where upcase(libname) ="&amp;amp;libname"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and upcase(memname)="&amp;amp;dsetin";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *Get count of total number of observations into macro variable;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into : obs_count&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from &amp;amp;libname..&amp;amp;dsetin.;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Start looping through the variable list here;&lt;/P&gt;&lt;P&gt;%let i=1;&lt;/P&gt;&lt;P&gt;%do %while (%scan(&amp;amp;var_list, &amp;amp;i, " ") ^=%str());&lt;/P&gt;&lt;P&gt;%let var=%scan(&amp;amp;var_list, &amp;amp;i, " ");&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Get format of missing;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt; set step1;&lt;/P&gt;&lt;P&gt; call symput("var_fmt", vformat(&amp;amp;var));&lt;/P&gt;&lt;P&gt; call symput("var_label", vlabel(&amp;amp;var));&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Get count of missing;&lt;/P&gt;&lt;P&gt;proc freq data=step1 noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; table &amp;amp;var/missing out=cross_tab1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data cross_tab2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set cross_tab1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; length variable $50.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; category=put(&amp;amp;var, &amp;amp;var_fmt.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; variable="&amp;amp;var_label.";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_=1 and category='Not Missing' then do;;&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; Number_Missing=&amp;amp;obs_count-count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Percent_Missing=Number_Missing/&amp;amp;obs_count.;&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; percent=percent/100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if _n_=1 and category='Missing' then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Missing=count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Percent_Missing=percent/100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&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; format percent: percent10.1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep variable Number_Missing Percent_Missing;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc append base=&amp;amp;dsetout data=cross_tab2 force;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc datasets nodetails nolist;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete cross_tab1 cross_tab2;&lt;/P&gt;&lt;P&gt;run; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*Increment counter;&lt;/P&gt;&lt;P&gt;%let i=%eval(&amp;amp;i+1);&lt;/P&gt;&lt;P&gt;%end; *Categorical;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc datasets nodetails nolist;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete step1;&lt;/P&gt;&lt;P&gt;run; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 19:04:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9212#M436</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2012-02-21T19:04:29Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9213#M437</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;A few good answers now. Thanks. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At the same time, can I ask if a program can automatically create a new temporary dataset which reports the percentage of missing values for all variables? Probably some use of the dictionary is needed.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 19:21:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9213#M437</guid>
      <dc:creator>Ruth</dc:creator>
      <dc:date>2012-02-21T19:21:45Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9214#M438</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You could just use a simple datastep.&amp;nbsp; e.g.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*create a test file with some missing data*/&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set sashelp.class;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ in (5,10,12) then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call missing(height,weight);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call missing(age);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (keep=percent_missing);&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have end=last;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array nums _numeric_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array chars _character_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do over nums;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if missing(nums) then m+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else n+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do over chars;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if missing(chars) then m+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else n+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if last then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; percent_missing=100*m/sum(m,n);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print data=want;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 19:46:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9214#M438</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-02-21T19:46:52Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9215#M439</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art, Wow! I did not know there is such a thing called 'do over'. I was thinking using proc content, and get the counts of numeric and character variable into macro variables. Much appreciated!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 20:06:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9215#M439</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-02-21T20:06:04Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9216#M440</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Just be alerted that some users have said that we shouldn't use that form of a loop because it is no longer documented.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I happen to like it and, unlike functions, etc. that have never been documented, this one has been, but isn't in the current documentation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 Feb 2012 22:33:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9216#M440</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-02-21T22:33:22Z</dc:date>
    </item>
    <item>
      <title>Is there any macro to check percentage of missing values in a dataset</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9217#M441</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Or SQL.&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;PRE&gt;/*create a test file with some missing data*/
data have;
&amp;nbsp; set sashelp.class;
&amp;nbsp; if _n_ in (5,10,12) then do;
&amp;nbsp;&amp;nbsp;&amp;nbsp; call missing(height,weight);
&amp;nbsp; end;
&amp;nbsp; call missing(age);
run;
proc sql ;
 select name into : list separated by ','
&amp;nbsp; from dictionary.columns
&amp;nbsp;&amp;nbsp; where libname='WORK' and memname='HAVE';

 select nvar into : nvar
&amp;nbsp; from dictionary.tables
&amp;nbsp;&amp;nbsp; where libname='WORK' and memname='HAVE';

 select count(*) into : total from have;

 select sum(cmiss(&amp;amp;list))/(&amp;amp;nvar * &amp;amp;total) as percent
&amp;nbsp; from have;

quit;

&lt;/PRE&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;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Feb 2012 11:04:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-any-macro-to-check-percentage-of-missing-values-in-a/m-p/9217#M441</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-02-22T11:04:03Z</dc:date>
    </item>
  </channel>
</rss>

