<?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: lookup multiple columns by name and reorganize it in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615240#M18728</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/305638"&gt;@edison83&lt;/a&gt;. Welcome to SAS communities. Not at all a dumb question. Take a look at my code below!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What you want to do here is convert to long form and then transpose back:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines dlm=',' missover;
	input ID (disease_1-disease_4) (:$15.);
	datalines;
1,HIV,Meningitis
2,Ebola,pneumonia,
3,Flu,HIV,Ebola,
4,Flu,Ebola,Meningitis,
5,Flu,
6,Meningitis,Ebola,Flu,HIV
7,pneumonia,Flu,HIV,
8,Ebola,Meningitis,
9,Flu,Meningitis,
10,Ebola,
11,Ebola,
12,Meningitis,Flu,
13,Meningitis,Ebola,HIV,Flu
14,Meningitis,HIV,
;
run;

data have_long;
	set have;
	array arr_dis disease:;

	do over arr_dis;

		if arr_dis ne '' then
			do;
				disease=arr_dis;
				output;
			end;
	end;
run;

proc sort data=have_long;
	by id disease;
run;

proc transpose data=have_long(keep=id disease) out=want(drop=_name_);
	by id;
	id disease;
	var disease;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 06 Jan 2020 03:04:26 GMT</pubDate>
    <dc:creator>unison</dc:creator>
    <dc:date>2020-01-06T03:04:26Z</dc:date>
    <item>
      <title>lookup multiple columns by name and reorganize it</title>
      <link>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615239#M18727</link>
      <description>&lt;P&gt;Hello everyone, i am new in sas and i maybe have a dumb question, but i could not find any answer online.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The following table contains the diseases diagnosed in each person (ID). Some have only one disease and others have multiples.&lt;/P&gt;&lt;P&gt;I would like to reorganize the date putting each disease in one column as the second table shows.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can you guys help me?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;1 disease&lt;/TD&gt;&lt;TD&gt;2 diseases&lt;/TD&gt;&lt;TD&gt;3 disease&lt;/TD&gt;&lt;TD&gt;4 diseases&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;pneumonia&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;pneumonia&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;&amp;nbsp;&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;ID&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;Pneumonia&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;Pneumonia&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Pneumonia&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;Flu&lt;/TD&gt;&lt;TD&gt;Meningitis&lt;/TD&gt;&lt;TD&gt;Ebola&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;HIV&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 06 Jan 2020 02:18:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615239#M18727</guid>
      <dc:creator>edison83</dc:creator>
      <dc:date>2020-01-06T02:18:59Z</dc:date>
    </item>
    <item>
      <title>Re: lookup multiple columns by name and reorganize it</title>
      <link>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615240#M18728</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/305638"&gt;@edison83&lt;/a&gt;. Welcome to SAS communities. Not at all a dumb question. Take a look at my code below!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What you want to do here is convert to long form and then transpose back:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines dlm=',' missover;
	input ID (disease_1-disease_4) (:$15.);
	datalines;
1,HIV,Meningitis
2,Ebola,pneumonia,
3,Flu,HIV,Ebola,
4,Flu,Ebola,Meningitis,
5,Flu,
6,Meningitis,Ebola,Flu,HIV
7,pneumonia,Flu,HIV,
8,Ebola,Meningitis,
9,Flu,Meningitis,
10,Ebola,
11,Ebola,
12,Meningitis,Flu,
13,Meningitis,Ebola,HIV,Flu
14,Meningitis,HIV,
;
run;

data have_long;
	set have;
	array arr_dis disease:;

	do over arr_dis;

		if arr_dis ne '' then
			do;
				disease=arr_dis;
				output;
			end;
	end;
run;

proc sort data=have_long;
	by id disease;
run;

proc transpose data=have_long(keep=id disease) out=want(drop=_name_);
	by id;
	id disease;
	var disease;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 06 Jan 2020 03:04:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615240#M18728</guid>
      <dc:creator>unison</dc:creator>
      <dc:date>2020-01-06T03:04:26Z</dc:date>
    </item>
    <item>
      <title>Re: lookup multiple columns by name and reorganize it</title>
      <link>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615243#M18730</link>
      <description>&lt;P&gt;Same idea, just a double PROC transpose as this syntactically seems easy, at least to me&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc transpose data=have out=temp;
by id;
var disease_1--disease_4;
run;

proc transpose data=temp out=want(drop=_name_);
where not missing(col1);
by id;
var col1;
id col1;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 06 Jan 2020 03:26:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615243#M18730</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-01-06T03:26:43Z</dc:date>
    </item>
    <item>
      <title>Re: lookup multiple columns by name and reorganize it</title>
      <link>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615249#M18731</link>
      <description>&lt;P&gt;There is a solution that can be implemented in one pass through the data.&amp;nbsp; It's admittedly more programming, but possibly more efficient with large data sets.&amp;nbsp; It requires use of a hash table to store the wide-form data, and a small hash table to track the variety of diseases:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines dlm=',' missover;
	input ID (disease_1-disease_4) (:$15.);
	datalines;
1,HIV,Meningitis
2,Ebola,pneumonia,
3,Flu,HIV,Ebola,
4,Flu,Ebola,Meningitis,
5,Flu,
6,Meningitis,Ebola,Flu,HIV
7,pneumonia,Flu,HIV,
8,Ebola,Meningitis,
9,Flu,Meningitis,
10,Ebola,
11,Ebola,
12,Meningitis,Flu,
13,Meningitis,Ebola,HIV,Flu
14,Meningitis,HIV,
;
run;

data empty;
  length id 8 name1-name40 $32;
  call missing (of _all_);
  stop;
run;

data _null_;
  merge have empty  end=end_of_have;
  length var_renames $5000;
  retain var_renames;

  if _n_=1 then do;
    declare hash wide (dataset:'empty',ordered:'a');
      wide.definekey('id');
      wide.definedata(all:'Y');
      wide.definedone();
    declare hash dlookup();
      dlookup.definekey('disease');
      dlookup.definedata('disease','d');
      dlookup.definedone();
  end;
  array nam {*} $32 name: ;

  do disease=disease_1,disease_2,disease_3,disease_4;
    if disease=' ' then leave;
    if dlookup.find()^=0 then do;
      d=dlookup.num_items+1;;
      dlookup.add();
      var_renames=catx(' ',var_renames,cats('name',d,'=',disease));
    end;
    nam{d}=disease;
  end;

  wide.add();

  if end_of_have;
  nd=dlookup.num_items;
  wide.output (dataset:catx(' ',"want (keep=id",cats('name1-name',ND),'rename=(',var_renames,')'));
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;OL&gt;
&lt;LI&gt;The EMPTY dataset is just a convenient an compact way to set up a list of dummy variable names.&amp;nbsp; Make sure you declare more names than there are distinct diseases in the original data.&amp;nbsp; Using EMPTY is also a compact way to declare the data content of hash object wide.&lt;/LI&gt;
&lt;LI&gt;I use a MERGE HAVE with EMPTY, even though EMPTY has no rows of data, just to force the data step to reset all the NAME variables to missing values at the top of each data step iteration.&lt;/LI&gt;
&lt;LI&gt;The first DO structure looks for new diseases, adds them to the DLOOKUP hash, and gives each disease an index value to co-ordinate with the array of NAME variables.&amp;nbsp; It also builds a rename list (e.g.&amp;nbsp; "name1=HIV name2=Meningitis …") to be used when the WIDE.OUTPUT method is used.&amp;nbsp; This is one of the great benefits of hash objects - you can dynamically generate exactly the list of needed variables, based on the data encountered.&amp;nbsp; No advance knowledge needed.&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Mon, 06 Jan 2020 04:30:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615249#M18731</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-01-06T04:30:19Z</dc:date>
    </item>
    <item>
      <title>Re: lookup multiple columns by name and reorganize it</title>
      <link>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615478#M18764</link>
      <description>Thanks a lot, it worked perfectly!</description>
      <pubDate>Mon, 06 Jan 2020 21:26:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/lookup-multiple-columns-by-name-and-reorganize-it/m-p/615478#M18764</guid>
      <dc:creator>edison83</dc:creator>
      <dc:date>2020-01-06T21:26:40Z</dc:date>
    </item>
  </channel>
</rss>

