<?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 Find Columns with Missing Values in a list of tables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951564#M371958</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I have a group of tables where I need to identify columns that do not have any values/ all missing values.&amp;nbsp; If I could do this in some iterative fashion like a macro that would be ideal as well.&amp;nbsp; Below is example of input and ideal output:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Input:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;work. table_1&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; Name&amp;nbsp; Date&amp;nbsp; Result&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; tim&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp;bob&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;3&amp;nbsp; louis&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;work. table_2&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; Name&amp;nbsp; Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; tim&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1/1/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp;bob&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;3&amp;nbsp; louis&amp;nbsp; &amp;nbsp; &amp;nbsp; 1/4/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;work. table_3&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; Name&amp;nbsp; Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1/1/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2&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;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1/4/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Output:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Table&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Missing_values_column&lt;/P&gt;&lt;P&gt;table_1&amp;nbsp; &amp;nbsp; &amp;nbsp; Date&lt;/P&gt;&lt;P&gt;table_2&amp;nbsp; &amp;nbsp; &amp;nbsp; Result&lt;/P&gt;&lt;P&gt;table_3&amp;nbsp; &amp;nbsp; &amp;nbsp; Name&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 21 Nov 2024 22:10:05 GMT</pubDate>
    <dc:creator>jmmedina252</dc:creator>
    <dc:date>2024-11-21T22:10:05Z</dc:date>
    <item>
      <title>Find Columns with Missing Values in a list of tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951564#M371958</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I have a group of tables where I need to identify columns that do not have any values/ all missing values.&amp;nbsp; If I could do this in some iterative fashion like a macro that would be ideal as well.&amp;nbsp; Below is example of input and ideal output:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Input:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;work. table_1&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; Name&amp;nbsp; Date&amp;nbsp; Result&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; tim&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp;bob&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;3&amp;nbsp; louis&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;work. table_2&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; Name&amp;nbsp; Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; tim&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1/1/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp;bob&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;3&amp;nbsp; louis&amp;nbsp; &amp;nbsp; &amp;nbsp; 1/4/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;work. table_3&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; Name&amp;nbsp; Date&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1/1/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;&lt;P&gt;2&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;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1/4/2024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Output:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Table&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Missing_values_column&lt;/P&gt;&lt;P&gt;table_1&amp;nbsp; &amp;nbsp; &amp;nbsp; Date&lt;/P&gt;&lt;P&gt;table_2&amp;nbsp; &amp;nbsp; &amp;nbsp; Result&lt;/P&gt;&lt;P&gt;table_3&amp;nbsp; &amp;nbsp; &amp;nbsp; Name&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2024 22:10:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951564#M371958</guid>
      <dc:creator>jmmedina252</dc:creator>
      <dc:date>2024-11-21T22:10:05Z</dc:date>
    </item>
    <item>
      <title>Re: Find Columns with Missing Values in a list of tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951566#M371959</link>
      <description>&lt;P&gt;Proc Freq NLEVELS is the easiest tool to find if any variables have any missing values:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;ods select nlevels;
proc freq data=mydataset nlevels;&lt;BR /&gt;ODS OUTPUT NLEVELS=mydatasetnelels;
run;&lt;/PRE&gt;
&lt;P&gt;This will tell you some additional information but if the the Missing has any count shown you have some.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2024 22:28:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951566#M371959</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2024-11-21T22:28:03Z</dc:date>
    </item>
    <item>
      <title>Re: Find Columns with Missing Values in a list of tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951569#M371960</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro miss(dslist=);
&lt;BR /&gt;    %if %sysfunc(exist(_all_miss)) %then %do;&lt;BR /&gt;        proc sql; drop table _all_miss; quit;&lt;BR /&gt;    %end;&lt;BR /&gt;
	%let dslist=%lowcase(%cmpres(&amp;amp;dslist));
	%let nds=%sysfunc(countW(&amp;amp;dslist, ' '));
	
	%do dsn=1 %to &amp;amp;nds;
	
		%let ds=%scan(&amp;amp;dslist,&amp;amp;dsn,' ');
		
		proc contents data=&amp;amp;ds noprint out=vars; run;
		
		proc sql noprint;
		select count(*) into :nn trimmed from vars where type=1; 
		select count(*) into :nc trimmed from vars where type=2; 
		quit;
		
		data _miss;
		set &amp;amp;ds end=last;
		array _n {*} _numeric_;
		array _c {*} _character_;
		array _nT {&amp;amp;nn} _temporary_;
		array _cT {&amp;amp;nc} _temporary_;
		retain _recnum 0;
		_recnum+1;
		do i=1 to dim(_n);
			_nT[i]+missing(_n[i]);
		end;
		do i=1 to dim(_c);
			_cT[i]+missing(_c[i]);
		end;
		if last then do;
			length dsname var $32;
			dsname="&amp;amp;ds";
			do i=1 to dim(_nT);
				if _nT[i]=_recnum then do;
					var=vname(_n[i]);
					output;
				end;
			end;
			do i=1 to dim(_cT);
				if _cT[i]=_recnum then do;
					var=vname(_c[i]);
					output;
				end;
			end;
		end;
		keep dsname var;
		run;
		
		proc append data=_miss base=_all_miss; run;
		
		proc sql;
		drop table _miss;
		quit;
		
	%end;
	
	proc print data=_all_miss; run;
	
%mend; *miss();

data test1;
x=3; y='a'; z=.; output;
x=3; y='a'; z=.; output;
run;

data test2;
x=3; y=''; z=.; output;
x=3; y=''; z=.; output;
run;
* sample call ;
%miss(dslist=test1 test2);&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 21 Nov 2024 23:47:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951569#M371960</guid>
      <dc:creator>quickbluefish</dc:creator>
      <dc:date>2024-11-21T23:47:26Z</dc:date>
    </item>
    <item>
      <title>Re: Find Columns with Missing Values in a list of tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951574#M371962</link>
      <description>&lt;P&gt;I wrote a paper related to this question.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://support.sas.com/resources/papers/proceedings20/4737-2020.pdf" target="_blank"&gt;https://support.sas.com/resources/papers/proceedings20/4737-2020.pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I proposed three ways to solve this.&lt;/P&gt;
&lt;P&gt;And I suggest to use PROC IML way due to fast and no need to use MACRO ,if your dataset was not very big.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The following is the PROC SQL way.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
set sashelp.class;
call missing(age,name);
run;
data heart;
set sashelp.heart;
call missing(weight,height);
run;
data class;
set sashelp.class;
run;

%let library=work; /*Here is the library I want to search*/
%macro find_missing_var(dsn);
proc transpose data=&amp;amp;dsn(obs=0) out=vname;
var _all_;
run;
proc sql noprint;
select catx(' ','n(',_name_,') as',_name_) into :vnames separated by ','
from vname;
create table temp as
select &amp;amp;vnames from &amp;amp;dsn;
quit;
proc transpose data=temp out=temp1;
var _all_;
run;
data temp2;
length table_name _name_ $ 100;
table_name="&amp;amp;dsn";
set temp1;
if col1=0;
run;
proc append base=want data=temp2 force;
run;
%mend;
proc delete data=want;
run;
data _null_;
set sashelp.vtable(
 keep=libname memname
 where=(libname="%upcase(&amp;amp;library)")
);
call execute(cats('%nrstr(%find_missing_var(',libname,'.',memname,'))'));
run;
title 'COLUMNS WITHOUT DATA';
proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ksharp_0-1732237714306.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/102443i07E177442BEAC777/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Ksharp_0-1732237714306.png" alt="Ksharp_0-1732237714306.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2024 01:08:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951574#M371962</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-11-22T01:08:44Z</dc:date>
    </item>
    <item>
      <title>Re: Find Columns with Missing Values in a list of tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951680#M371990</link>
      <description>&lt;P&gt;Thank you so much for writing the paper, really great and helpful insight!&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2024 21:12:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-Columns-with-Missing-Values-in-a-list-of-tables/m-p/951680#M371990</guid>
      <dc:creator>New_2_SAS</dc:creator>
      <dc:date>2024-11-22T21:12:12Z</dc:date>
    </item>
  </channel>
</rss>

