<?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: How do I subset a dataset, create a new row from its content, and remerge the rows to a new data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702872#M215302</link>
    <description>&lt;P&gt;Thank you very much for your help everyone I ended up using the "proc sql" since it seemed like it would be the easiest to repurpose and add extra data to for my other analyses.&lt;/P&gt;</description>
    <pubDate>Tue, 01 Dec 2020 19:04:36 GMT</pubDate>
    <dc:creator>friendguy13</dc:creator>
    <dc:date>2020-12-01T19:04:36Z</dc:date>
    <item>
      <title>How do I subset a dataset, create a new row from its content, and remerge the rows to a new dataset?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702407#M215130</link>
      <description>&lt;P&gt;I am working with a data set of water samples that were tested for the presence of legionella using PCR.&amp;nbsp; I most cases multiple samples were collected from different sites in the same building and all of the rows of the table contain a building ID indicating which building they are from.&amp;nbsp; I am looking to subset the data by building ID, build a new row of data for each subset consisting of the combined stats from all the rows of the subset, and then merge the newly created rows into a new data set.&amp;nbsp; I know I can subset the data by using "by Building_ID" but I am totally lost on creating and merging a new data set from those subsets.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For reference my data looks something like this:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Sample ID&lt;/TD&gt;&lt;TD&gt;Building ID&lt;/TD&gt;&lt;TD&gt;Facility Type&lt;/TD&gt;&lt;TD&gt;Legionella Present&lt;/TD&gt;&lt;TD&gt;Legionella Load&lt;/TD&gt;&lt;TD&gt;Building Floors&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6000&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And I need my output to look something like this:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Building ID&lt;/TD&gt;&lt;TD&gt;Legionella Present&lt;/TD&gt;&lt;TD&gt;Legionella Load Max&lt;/TD&gt;&lt;TD&gt;Legionella Load Min&lt;/TD&gt;&lt;TD&gt;Legionella Load Average&lt;/TD&gt;&lt;TD&gt;Building Floors&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;250&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 30 Nov 2020 05:45:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702407#M215130</guid>
      <dc:creator>friendguy13</dc:creator>
      <dc:date>2020-11-30T05:45:02Z</dc:date>
    </item>
    <item>
      <title>Re: How do I subset a dataset, create a new row from its content, and remerge the rows to a new data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702410#M215131</link>
      <description>&lt;P&gt;Assuming that Legionella_Present and Legionella_Load are numeric:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary data=work.have nway;
   class Building_ID;
   id Building_Floors;
   var  Legionella_Present Legionella_Load;
   output out= work.calc(drop= _type_ _freq_) max= min(Legionella_Load)= mean(Legionella_Load)= /autoname;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 30 Nov 2020 06:19:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702410#M215131</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2020-11-30T06:19:02Z</dc:date>
    </item>
    <item>
      <title>Re: How do I subset a dataset, create a new row from its content, and remerge the rows to a new data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702416#M215133</link>
      <description>&lt;P&gt;You can also try simple proc sql query.&lt;/P&gt;
&lt;P&gt;/* Created sample data here */&lt;/P&gt;
&lt;P&gt;proc import datafile='C:\Users\Dharmu\Desktop\Minu SAS Training\Water.xlsx' out=have dbms=xlsx replace;run;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;proc sort data=have;by building_id Legionella_Load;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;BR /&gt;create table want as&lt;BR /&gt;select Building_ID,&lt;BR /&gt;max(Legionella_Present) as Legionella_Present,&lt;BR /&gt;min(Legionella_Load) as Min_Legionella_Load,&lt;BR /&gt;max(Legionella_Load) as Max_Legionella_Load,&lt;BR /&gt;Avg(Legionella_Load) as Avg_Legionella_Load,&lt;BR /&gt;max(building_floors) as building_floors&lt;BR /&gt;from have group by Building_ID;&lt;BR /&gt;quit;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc print data=want;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 30 Nov 2020 07:40:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702416#M215133</guid>
      <dc:creator>LittlesasMaster</dc:creator>
      <dc:date>2020-11-30T07:40:31Z</dc:date>
    </item>
    <item>
      <title>Re: How do I subset a dataset, create a new row from its content, and remerge the rows to a new data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702665#M215224</link>
      <description>&lt;P&gt;You could potentially use a PROC REPORT function to get the data pretty close to what you want.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DATA WORK.QA;&lt;BR /&gt;INFILE DATALINES;&lt;BR /&gt;INPUT SampleID&lt;BR /&gt;BuildingID&lt;BR /&gt;FacilityType&lt;BR /&gt;LegionellaPresent&lt;BR /&gt;LegioellaLoad&lt;BR /&gt;Buildingfloors&lt;BR /&gt;;&lt;BR /&gt;DATALINES;&lt;BR /&gt;1 1 1 1 500 1&lt;BR /&gt;2 1 1 0 0 1&lt;BR /&gt;3 2 2 0 0 3&lt;BR /&gt;4 3 2 1 6000 5&lt;BR /&gt;5 3 2 0 0 5&lt;BR /&gt;6 3 2 0 0 5&lt;BR /&gt;7 4 1 1 200 2&lt;BR /&gt;8 4 1 1 400 2&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So based off the data that you gave us, I read the data in by using datalines, so the names of the variables are listed above. After that I used a PROC REPORT function to get the table.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PROC REPORT DATA = WORK.QA&lt;BR /&gt;SPLIT = "/";&lt;BR /&gt;COLUMN BuildingID LegionellaPresent LegioellaLoad,(MAX MIN MEAN) Buildingfloors;&lt;/P&gt;&lt;P&gt;DEFINE BuildingID / GROUP "Building/ID";&lt;BR /&gt;DEFINE LegionellaPresent / "Legionella/Present";&lt;BR /&gt;DEFINE Buildingfloors / GROUP "Building/floors";&lt;BR /&gt;DEFINE LegioellaLoad / "Legioella Load";&lt;BR /&gt;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So here I am creating a table with the columns as the variable names for BuildingID LegionellaPresent LegioellaLoad, Buildingfloors. For LegioellaLoad I asked SAS to find the max, min, and mean.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then I grouped the data by BuildingID and Buildingfloors, and renamed all the variables, so that they somewhat matched the description above.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;At the end, the table should look something like this.&lt;/P&gt;&lt;DIV class="branch"&gt;&lt;DIV&gt;&lt;DIV align="center"&gt;&amp;nbsp; Legioella Load &amp;nbsp;BuildingID LegionellaPresent MAX MIN MEAN Buildingfloors &lt;TABLE cellspacing="0" cellpadding="5"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;250&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2000&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 30 Nov 2020 22:54:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702665#M215224</guid>
      <dc:creator>tagawa_sas</dc:creator>
      <dc:date>2020-11-30T22:54:55Z</dc:date>
    </item>
    <item>
      <title>Re: How do I subset a dataset, create a new row from its content, and remerge the rows to a new data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702684#M215231</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines dlm="09"x;
	input Sample_ID Building_ID Facility_Type Legionella_Present Legionella_Load 
		Building_Floors;
	datalines;
1	1	1	1	500	1
2	1	1	0	0	1
3	2	2	0	0	3
4	3	2	1	6000	5
5	3	2	0	0	5
6	3	2	0	0	5
7	4	1	1	200	2
8	4	1	1	400	2
;
run;

data want(keep=Building_ID
	       Legionella_Present_max
	       Legionella_load_max
	       Legionella_load_min
	       Legionella_load_Average
	       Building_Floors rename=(Legionella_Present_max=Legionella_Present)
);
	*keep variables ordered using length statement;
	length Building_ID 
	       Legionella_Present_max 
	       Legionella_load_max 
	       Legionella_load_min 
	       Legionella_load_Average
	       Building_Floors 8;
	*define arrays to calculate min and max;
	array l_[10];
	array p_[10];
	       
	do _N_=1 by 1 until(last.building_id);
		set have;
		by building_id;
		
		*input Legionella_Load and Legionella_Present into array by obs;
		l_[_N_]=Legionella_Load;
		p_[_N_]=Legionella_Present;
		
		*calculate max and min using of keyword;
		Legionella_load_max=max(of l_[*]);
		Legionella_load_min=min(of l_[*]);
		Legionella_Present_max=max(of p_[*]);
		
		if first.building_id 
			then
				sum=.;
				
		*sum statement;
		sum+Legionella_Load;
		Legionella_load_Average=sum/_N_;
	end;
	*drop Legionella_Present variable and rename it in data step rename option;
	drop Legionella_Present;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 01 Dec 2020 01:17:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702684#M215231</guid>
      <dc:creator>hhinohar</dc:creator>
      <dc:date>2020-12-01T01:17:53Z</dc:date>
    </item>
    <item>
      <title>Re: How do I subset a dataset, create a new row from its content, and remerge the rows to a new data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702872#M215302</link>
      <description>&lt;P&gt;Thank you very much for your help everyone I ended up using the "proc sql" since it seemed like it would be the easiest to repurpose and add extra data to for my other analyses.&lt;/P&gt;</description>
      <pubDate>Tue, 01 Dec 2020 19:04:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-subset-a-dataset-create-a-new-row-from-its-content-and/m-p/702872#M215302</guid>
      <dc:creator>friendguy13</dc:creator>
      <dc:date>2020-12-01T19:04:36Z</dc:date>
    </item>
  </channel>
</rss>

