<?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 Select only error records in one variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Select-only-error-records-in-one-variable/m-p/593657#M170403</link>
    <description>&lt;P&gt;I want to capture only the error records based on some condition in one seperate variable. So I tried the code as below, but it is not producing the desired Output.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines;
input id $ sex $ age $;
datalines;
. M 21
2 F 23
23 M 21
;
run;

data want (drop=separator);
length Faulty_Record $ 200;
retain id sex age Faulty_Record;
set have;
if id = " " then do;
    separator=' ';
    Faulty_Record = catx(separator,of _all_);
    err_message = "ID Variable cannot be missing";
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Output of WANT dataset is,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Faulty_Record&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;id&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;sex&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;age&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;err_message&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;ID Variable cannot be missing&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desired Output WANT dataset should be,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Faulty_Record&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;id&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;sex&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;age&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;err_message&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;ID Variable cannot be missing&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;On a seperate note, I'm not sure why retain Statement is not arranging the variables in the order which I gave in retain Statement.&lt;/P&gt;</description>
    <pubDate>Thu, 03 Oct 2019 09:44:30 GMT</pubDate>
    <dc:creator>David_Billa</dc:creator>
    <dc:date>2019-10-03T09:44:30Z</dc:date>
    <item>
      <title>Select only error records in one variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-only-error-records-in-one-variable/m-p/593657#M170403</link>
      <description>&lt;P&gt;I want to capture only the error records based on some condition in one seperate variable. So I tried the code as below, but it is not producing the desired Output.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines;
input id $ sex $ age $;
datalines;
. M 21
2 F 23
23 M 21
;
run;

data want (drop=separator);
length Faulty_Record $ 200;
retain id sex age Faulty_Record;
set have;
if id = " " then do;
    separator=' ';
    Faulty_Record = catx(separator,of _all_);
    err_message = "ID Variable cannot be missing";
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Output of WANT dataset is,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Faulty_Record&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;id&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;sex&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;age&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;err_message&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;ID Variable cannot be missing&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desired Output WANT dataset should be,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Faulty_Record&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;id&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;sex&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;age&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;err_message&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;M 21&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;ID Variable cannot be missing&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;H&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;On a seperate note, I'm not sure why retain Statement is not arranging the variables in the order which I gave in retain Statement.&lt;/P&gt;</description>
      <pubDate>Thu, 03 Oct 2019 09:44:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-only-error-records-in-one-variable/m-p/593657#M170403</guid>
      <dc:creator>David_Billa</dc:creator>
      <dc:date>2019-10-03T09:44:30Z</dc:date>
    </item>
    <item>
      <title>Re: Select only error records in one variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Select-only-error-records-in-one-variable/m-p/593662#M170405</link>
      <description>&lt;P&gt;The RETAIN statement is used to retain variables, so that they are not set to missing at each iteration of the datastep. That is why your Faulty_Record is set for all records. But it is true that you can also use the RETAIN statement to change the order of variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can get the result you want like this:&lt;/P&gt;
&lt;PRE&gt;data want;&lt;BR /&gt;set have;&lt;BR /&gt;length Faulty_Record $200;&lt;BR /&gt;if id = " " then do;&lt;BR /&gt;  Faulty_Record = catx(' ',of _all_);&lt;BR /&gt;  err_message = "ID Variable cannot be missing";&lt;BR /&gt;end;&lt;BR /&gt;run;&lt;/PRE&gt;
&lt;P&gt;In other words: Declare the faulty record after reading the input, so that the input data variables are created first. And no need for a special variable for the CATX separator, just use a constant.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Oct 2019 10:28:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Select-only-error-records-in-one-variable/m-p/593662#M170405</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2019-10-03T10:28:53Z</dc:date>
    </item>
  </channel>
</rss>

