<?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 Multiple By Statements with First./Last. in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/488989#M127535</link>
    <description>&lt;P&gt;Trying to convert a table in this format:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="283"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="20"&gt;ID&lt;/TD&gt;
&lt;TD width="56"&gt;ON_OFF&lt;/TD&gt;
&lt;TD width="96"&gt;CATEGORY&lt;/TD&gt;
&lt;TD width="111"&gt;Group&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;P&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;G&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;O&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;R&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;G&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;S&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;R&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;G&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;S&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;S&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;R&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To a single record per id table in this format:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="283"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="20"&gt;ID&lt;/TD&gt;
&lt;TD width="56"&gt;ON_OFF&lt;/TD&gt;
&lt;TD width="96"&gt;CATEGORY&lt;/TD&gt;
&lt;TD width="111"&gt;Group&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;OFF_ON&lt;/TD&gt;
&lt;TD&gt;P_G&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;A_B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;O_R&lt;/TD&gt;
&lt;TD&gt;A_B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;OFF_ON&lt;/TD&gt;
&lt;TD&gt;C_G&lt;/TD&gt;
&lt;TD&gt;A_B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;OFF_ON&lt;/TD&gt;
&lt;TD&gt;S_R_G&lt;/TD&gt;
&lt;TD&gt;A_A_C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;S_R&lt;/TD&gt;
&lt;TD&gt;A_B_A&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that in some cases, I just need the unique instances of the variable (such as with On_Off) but in other&amp;nbsp;cases I need every instance (such as with Group).&amp;nbsp; I have been trying first./last. processing with by statements, but I can only get that to work with one variable at a time.&amp;nbsp; Is there a way to do this for N variables within the same data step?&amp;nbsp; Any insights are greatly appreciated!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Want;

	set Have;
	length cat source $500; 
	retain cat source;
	by ID notsorted category on_off;

	if first.ID then call missing(cat);
	if first.category then cat=catx('_',cat,category);

	if first.ID then call missing(source);
	if first.on_off then source=catx('_',source,on_off);

	if last.;

run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 22 Aug 2018 17:29:11 GMT</pubDate>
    <dc:creator>P5C768</dc:creator>
    <dc:date>2018-08-22T17:29:11Z</dc:date>
    <item>
      <title>Multiple By Statements with First./Last.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/488989#M127535</link>
      <description>&lt;P&gt;Trying to convert a table in this format:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="283"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="20"&gt;ID&lt;/TD&gt;
&lt;TD width="56"&gt;ON_OFF&lt;/TD&gt;
&lt;TD width="96"&gt;CATEGORY&lt;/TD&gt;
&lt;TD width="111"&gt;Group&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;P&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;G&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;O&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;R&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;G&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;S&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;R&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;G&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;S&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;S&lt;/TD&gt;
&lt;TD&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;R&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To a single record per id table in this format:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="283"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="20"&gt;ID&lt;/TD&gt;
&lt;TD width="56"&gt;ON_OFF&lt;/TD&gt;
&lt;TD width="96"&gt;CATEGORY&lt;/TD&gt;
&lt;TD width="111"&gt;Group&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;OFF_ON&lt;/TD&gt;
&lt;TD&gt;P_G&lt;/TD&gt;
&lt;TD&gt;A&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;C&lt;/TD&gt;
&lt;TD&gt;A_B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;OFF&lt;/TD&gt;
&lt;TD&gt;O_R&lt;/TD&gt;
&lt;TD&gt;A_B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;OFF_ON&lt;/TD&gt;
&lt;TD&gt;C_G&lt;/TD&gt;
&lt;TD&gt;A_B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;OFF_ON&lt;/TD&gt;
&lt;TD&gt;S_R_G&lt;/TD&gt;
&lt;TD&gt;A_A_C&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;ON&lt;/TD&gt;
&lt;TD&gt;S_R&lt;/TD&gt;
&lt;TD&gt;A_B_A&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that in some cases, I just need the unique instances of the variable (such as with On_Off) but in other&amp;nbsp;cases I need every instance (such as with Group).&amp;nbsp; I have been trying first./last. processing with by statements, but I can only get that to work with one variable at a time.&amp;nbsp; Is there a way to do this for N variables within the same data step?&amp;nbsp; Any insights are greatly appreciated!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Want;

	set Have;
	length cat source $500; 
	retain cat source;
	by ID notsorted category on_off;

	if first.ID then call missing(cat);
	if first.category then cat=catx('_',cat,category);

	if first.ID then call missing(source);
	if first.on_off then source=catx('_',source,on_off);

	if last.;

run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 22 Aug 2018 17:29:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/488989#M127535</guid>
      <dc:creator>P5C768</dc:creator>
      <dc:date>2018-08-22T17:29:11Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple By Statements with First./Last.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/488993#M127538</link>
      <description>&lt;P&gt;Just DO UNTIL(last.ID) will be required to achieve this&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data have;
infile datalines dlm=',' dsd missover;
input ID	ON_OFF :$8.	CATEGORY :$8.	Group:$8.;
datalines;
1,OFF,P,A
1,ON,G,A
2,OFF,C,A
2,OFF,C,B
3,OFF,O,A
3,OFF,R,B
4,OFF,C,A
4,ON,G,B
5,OFF,S,A
5,OFF,R,A
5,ON,G,C
6,ON,S,A
6,ON,S,B
6,ON,R,A
;
run;

proc sort data=have;
by id;
run;

data want(keep=id ON_OFF CATEGORY  Group);
Format ON_OFF CATEGORY  Group $15.;
do until(last.id);
set have(rename=( ON_OFF=ON_OFF_ CATEGORY=CATEGORY_ Group=Group_));
by id;
ON_OFF=tranwrd(Strip(strip(ON_OFF)||' '||strip(ON_OFF_))," ","_");
CATEGORY=tranwrd(strip(strip(CATEGORY)||' '||strip(CATEGORY_))," ","_");
Group=tranwrd(strip(strip(Group)||' '||strip(Group_))," ","_");

end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Alternatively,&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test(drop=category_ Group_ ON_OFF_);
Format ON_OFF CATEGORY  Group $15.;
retain  on_off category group;
set have(rename=( ON_OFF=ON_OFF_ CATEGORY=CATEGORY_ Group=Group_));
by id;
if first.id then do;
			ON_OFF=" ";
			CATEGORY=" ";
			Group=" ";
			end;
on_off=catx("_",on_off_,on_off);
CATEGORY=catx("_",CATEGORY,CATEGORY_);
Group=catx('_',Group,Group_);
if last.id;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Aug 2018 18:23:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/488993#M127538</guid>
      <dc:creator>SuryaKiran</dc:creator>
      <dc:date>2018-08-22T18:23:23Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple By Statements with First./Last.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489255#M127709</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data have;
infile datalines dlm=',' dsd missover;
input ID	ON_OFF :$8.	CATEGORY :$8.	Group:$8.;
datalines;
1,OFF,P,A
1,ON,G,A
2,OFF,C,A
2,OFF,C,B
3,OFF,O,A
3,OFF,R,B
4,OFF,C,A
4,ON,G,B
5,OFF,S,A
5,OFF,R,A
5,ON,G,C
6,ON,S,A
6,ON,S,B
6,ON,R,A
;
run;
data want;
 array x1{999} $ 100 _temporary_;
 array x2{999} $ 100 _temporary_;
 array x3{999} $ 100 _temporary_;
 call missing(of x1{*} x2{*} x3{*});
 i1=0;i2=0;i3=0;
 do until(last.id);
    set have;
    by id;
    if ON_OFF not in x1 then do; i1+1;x1{i1}=ON_OFF;end;
	if CATEGORY not in x2 then do; i2+1;x2{i2}=CATEGORY;end;
    i3+1;x3{i3}=Group;
 end;
new_ON_OFF=catx('_',of x1{*});
new_CATEGORY=catx('_',of x2{*});
new_Group=catx('_',of x3{*});
drop ON_OFF CATEGORY Group i1 i2 i3;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 23 Aug 2018 13:14:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489255#M127709</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-08-23T13:14:57Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple By Statements with First./Last.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489271#M127717</link>
      <description>&lt;P&gt;Alternatively you could try the below code&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data want;
length new_on_off new_CATEGORY new_group $100;
set have;
by id ;
retain new_on_off new_CATEGORY new_group;
if first.id then new_on_off='';
if first.id then new_CATEGORY='';
if first.id then new_group='';
if on_off ne '' and new_on_off ne on_off then new_on_off=catx('_',new_on_off,on_off);
if CATEGORY ne '' and new_CATEGORY ne CATEGORY then new_CATEGORY=catx('_',new_CATEGORY,CATEGORY);
if Group ne '' and new_group ne Group then new_group=catx('_',new_group,Group);
if last.id;
keep new_on_off new_CATEGORY new_group;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Aug 2018 13:52:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489271#M127717</guid>
      <dc:creator>Jagadishkatam</dc:creator>
      <dc:date>2018-08-23T13:52:41Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple By Statements with First./Last.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489275#M127718</link>
      <description>&lt;P&gt;For the cases where you just need the unique values do you need them in any order?&amp;nbsp; The order the first appear?&amp;nbsp; Lexical order?&lt;/P&gt;
&lt;P&gt;You can use&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/18408"&gt;@Ksharp&lt;/a&gt;&amp;nbsp;'s trick of temporary arrays to support all of your combinations.&amp;nbsp; Then if you did want the distinct values ordered you could add a line to use CALL SORTC() to sort the distinct values.&amp;nbsp; So for example to list the CATEGORY values in lexical order and the ON_OFF values in whatever order they appear you program might look like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  array x1(999) $8 _temporary_;
  array x2(999) $8 _temporary_;
  array x3(999) $8 _temporary_;
  call missing(of x1(*) x2(*) x3(*));
  do i=1 by 1 until(last.id);
    set have;
    by id;
    if ON_OFF not in x1 then x1(i)=ON_OFF ;
    if CATEGORY not in x2 then x2(i)=CATEGORY ;
    x3(i)=Group;
  end;
  length new_ON_OFF new_CATEGORY new_GROUP $200;
  call sortc(of x2(*));
  new_ON_OFF=catx('_',of x1(*));
  new_CATEGORY=catx('_',of x2(*));
  new_Group=catx('_',of x3(*));
  drop ON_OFF CATEGORY Group i ;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 23 Aug 2018 14:05:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489275#M127718</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-08-23T14:05:01Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple By Statements with First./Last.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489439#M127792</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Want;
Set Have;
Retain On_Off2 Cat2 Group2 Count;
By Id Notsorted;

Groups = Lag(Group);

If First.Id Then
        Do;
                On_Off2 = On_Off;
                Cat2 = Category;
                Group2 = Group;
                Count = 1;
        End;

Else
        Do;
                If Group ^= Groups Then Count + 1;
                If On_Off ^= On_Off2 Then On_Off2 = Catx('_', On_Off2, On_Off);
                If Category ^= Cat2  Then Cat2 = Catx('_', Cat2, Category);
                Group2 = Catx('_', Group2, Group);
        End;

If Last.Id;

If Count = 1 Then Group2 = Substr(Group2, 1, 1);

Keep ID On_Off2 Cat2 Group2;
Rename On_Off2 = On_Off Cat2 = Category Group2 = Group;

Run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 23 Aug 2018 22:38:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-By-Statements-with-First-Last/m-p/489439#M127792</guid>
      <dc:creator>jdwaterman91</dc:creator>
      <dc:date>2018-08-23T22:38:31Z</dc:date>
    </item>
  </channel>
</rss>

