<?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: Binary Flags in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319353#M70120</link>
    <description>&lt;P&gt;Thanks a ton. What an elegant solution! Would you mind explaining how it works? I didn't get what second WHICHC is doing.&lt;/P&gt;</description>
    <pubDate>Thu, 15 Dec 2016 18:15:54 GMT</pubDate>
    <dc:creator>Ujjawal</dc:creator>
    <dc:date>2016-12-15T18:15:54Z</dc:date>
    <item>
      <title>Binary Flags</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319326#M70105</link>
      <description>&lt;P&gt;Hi Team,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have data in the following form -&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 48pt;" border="0" width="64" cellspacing="0" cellpadding="0"&gt;&lt;COLGROUP&gt;&lt;COL style="width: 48pt;" width="64" /&gt; &lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD width="64" height="20" style="height: 15.0pt; width: 48pt;"&gt;var1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;D&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;E&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;E&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" style="height: 15.0pt;"&gt;E&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want the above data in the following form -&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 240pt;" border="0" width="320" cellspacing="0" cellpadding="0"&gt;&lt;COLGROUP&gt;&lt;COL style="width: 48pt;" span="5" width="64" /&gt; &lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD width="64" height="20" style="height: 15.0pt; width: 48pt;"&gt;A&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;B&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;C&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;D&lt;/TD&gt;
&lt;TD width="64" style="width: 48pt;"&gt;E&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;1&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" align="right" style="height: 15.0pt;"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;0&lt;/TD&gt;
&lt;TD align="right"&gt;
&lt;P&gt;1&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want to create a binary flag for each of the distinct values of a variable and create variables accordingly.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Dec 2016 17:05:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319326#M70105</guid>
      <dc:creator>Ujjawal</dc:creator>
      <dc:date>2016-12-15T17:05:56Z</dc:date>
    </item>
    <item>
      <title>Re: Binary Flags</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319329#M70108</link>
      <description>&lt;P&gt;Here's one way:&lt;/P&gt;
&lt;PRE&gt;data want;
   set have;
   array t {5} $ _temporary_ ('A' 'B' 'C' 'D' 'E');
   array v {5} A B C D E (5*0);
   v[whichc(Var1,of t{*})] = 1;
   output;
   v[whichc(Var1,of t{*})] = 0;

   drop var1;
run;&lt;/PRE&gt;</description>
      <pubDate>Thu, 15 Dec 2016 17:20:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319329#M70108</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-12-15T17:20:24Z</dc:date>
    </item>
    <item>
      <title>Re: Binary Flags</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319330#M70109</link>
      <description>&lt;P&gt;And what is the logic for starting a new row? &amp;nbsp;In your test data you have A, A, but these appear on separate rows. &amp;nbsp;Does this mean if the next observation is same or earlier alphabetically then it goes to a new row?&lt;/P&gt;
&lt;P&gt;So, this code assigns an id based on letter being lower or equal to previous, so we have a logical operator to transpose the data up.&lt;/P&gt;
&lt;PRE&gt;data have;
  input var1 $;
datalines;
A
A
C
D
C
D
A
A
;
run;

data inter;
  set have;
  retain id;
  if _n_=1 then id=1;
  if var1 &amp;lt;= lag(var1) then id=id+1;
  pres=1;
run;

proc transpose data=inter out=want;
  by id;
  var pres;
  id var1;
  idlabel var1;
run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To be honest though, I don't see any real benefit in the second type of output, your just creating a load more cells with nothing?&lt;/P&gt;</description>
      <pubDate>Thu, 15 Dec 2016 17:22:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319330#M70109</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2016-12-15T17:22:01Z</dc:date>
    </item>
    <item>
      <title>Re: Binary Flags</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319353#M70120</link>
      <description>&lt;P&gt;Thanks a ton. What an elegant solution! Would you mind explaining how it works? I didn't get what second WHICHC is doing.&lt;/P&gt;</description>
      <pubDate>Thu, 15 Dec 2016 18:15:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319353#M70120</guid>
      <dc:creator>Ujjawal</dc:creator>
      <dc:date>2016-12-15T18:15:54Z</dc:date>
    </item>
    <item>
      <title>Re: Binary Flags</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319383#M70135</link>
      <description>&lt;P&gt;I would suggest that you run the code once without the output statement or the second whichc to see what the result looks like.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is an oddity of assigning values in the array initialization process. If you search the documentation on the Array statement you may find a statement similar to:&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#339966"&gt;When any (or all) elements are assigned initial values, all elements behave as if they were named on a RETAIN statement.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000000"&gt;Retain means that the values are kept from interation of the datastep to the next. With out the output to write the desired values at a given time and the resetting of the value with the second whichc eventually the program as written yields all 1's for the values. Probably not needed to save clock cycles. An Explicit loop over every value of the array with the flags could avoid the confusion but the as coded approach executes fewer "if" comparison that the loop would require.&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Dec 2016 20:45:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319383#M70135</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-12-15T20:45:06Z</dc:date>
    </item>
    <item>
      <title>Re: Binary Flags</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319441#M70162</link>
      <description>&lt;PRE&gt;
It is called design matrix. Here are two simple way.

1)
data have;
input var1 $;
cards;
A
A
C
D
C
D
A
A
B
C
D
E
E
A
B
E
;
run;
proc iml;
use have;
read all var {var1};
close;
vname=unique(var1);
want=design(var1);
print want[c=vname];
quit;

2)
data have;
 set have;
 retain y 1;
run;
proc logistic data=have outdesign=want(keep=var:) outdesignonly noprint;
 class var1/param=glm;
 model y=var1;
run;

&lt;/PRE&gt;</description>
      <pubDate>Fri, 16 Dec 2016 04:15:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Binary-Flags/m-p/319441#M70162</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-12-16T04:15:03Z</dc:date>
    </item>
  </channel>
</rss>

