<?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 to collapse multiple observations into one in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568772#M160182</link>
    <description>&lt;P&gt;Try PROC TRANSPOSE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#transpose-overview.htm" target="_blank"&gt;http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#transpose-overview.htm&lt;/A&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 25 Jun 2019 13:59:18 GMT</pubDate>
    <dc:creator>alexgouv</dc:creator>
    <dc:date>2019-06-25T13:59:18Z</dc:date>
    <item>
      <title>How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568752#M160177</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am working with bond data. A single bond series has a header of descriptive information, then a bunch of cusips to identify individual bonds in the series. It resembles the below:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Type&lt;/TD&gt;&lt;TD&gt;Maturity&lt;/TD&gt;&lt;TD&gt;Series&lt;/TD&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;GO&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;TD&gt;280129&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;630693&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;RV&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;2400&lt;/TD&gt;&lt;TD&gt;273075&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;GO&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;2500&lt;/TD&gt;&lt;TD&gt;170564&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;GO&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;321339&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;488161&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;379597&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;773084&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;RV&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;36892&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;659199&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;&lt;P&gt;468958&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 the ID variable to be on the same row as the header information as below:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Type&lt;/TD&gt;&lt;TD&gt;Maturity&lt;/TD&gt;&lt;TD&gt;Series&lt;/TD&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;ID2&lt;/TD&gt;&lt;TD&gt;ID3&lt;/TD&gt;&lt;TD&gt;ID4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;GO&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;5000&lt;/TD&gt;&lt;TD&gt;280129&lt;/TD&gt;&lt;TD&gt;630693&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;RV&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;2400&lt;/TD&gt;&lt;TD&gt;273075&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;GO&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;2500&lt;/TD&gt;&lt;TD&gt;170564&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;GO&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;321339&lt;/TD&gt;&lt;TD&gt;488161&lt;/TD&gt;&lt;TD&gt;379597&lt;/TD&gt;&lt;TD&gt;773084&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;RV&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;200&lt;/TD&gt;&lt;TD&gt;36892&lt;/TD&gt;&lt;TD&gt;659199&lt;/TD&gt;&lt;TD&gt;468958&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;There can be upwards of 100 separate IDs that all pertain to the same header information.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am struggling with how to do this and would appreciate any advice.&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 13:37:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568752#M160177</guid>
      <dc:creator>Jacob3</dc:creator>
      <dc:date>2019-06-25T13:37:50Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568772#M160182</link>
      <description>&lt;P&gt;Try PROC TRANSPOSE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#transpose-overview.htm" target="_blank"&gt;http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#transpose-overview.htm&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 13:59:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568772#M160182</guid>
      <dc:creator>alexgouv</dc:creator>
      <dc:date>2019-06-25T13:59:18Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568774#M160184</link>
      <description>&lt;P&gt;If we are using this logic to create a starter dummy dataset that appears as your example does:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA WORK.HAVE;
FORMAT   Type $2.  Maturity 2. Series $4. ID $6.;
INFORMAT Type $2.  Maturity 2. Series $4. ID $6.;
INPUT 	 Type      Maturity    Series     ID;
DATALINES;
GO 20 5000 280129 
GO 20 5000 630693 
RV 5 2400 273075 
GO 7 2500 170564 
GO 15 1000 321339 
GO 15 1000 488161 
GO 15 1000 379597 
GO 15 1000 773084 
RV 12 200 36892 
RV 12 200 659199 
RV 12 200 468958
;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;You can then use a PROC TRANSPOSE step to create new variable fields for each of the individual IDs aligned to a specific combination of Type/Maturity/Series.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SORT DATA=WORK.Have; BY Type Maturity Series ID; RUN;

PROC TRANSPOSE DATA=WORK.Have out=WORK.WANT (drop=_name_) prefix=ID_;
	var	ID;
	by Type Maturity Series;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Hope this helps&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 14:04:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568774#M160184</guid>
      <dc:creator>tsap</dc:creator>
      <dc:date>2019-06-25T14:04:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568795#M160193</link>
      <description>&lt;P&gt;Thank you very much for your reply. I thought of doing something similar. However, only the first observation for each series contains the header information. So, as in the example data I provided, Type, Maturity, and Series are all missing for the subsequent observations after each "header observation".&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 14:30:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568795#M160193</guid>
      <dc:creator>Jacob3</dc:creator>
      <dc:date>2019-06-25T14:30:47Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568798#M160195</link>
      <description>&lt;P&gt;Are you able to copy the header information to each subsequent blank cell?&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 14:33:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568798#M160195</guid>
      <dc:creator>alexgouv</dc:creator>
      <dc:date>2019-06-25T14:33:36Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568802#M160198</link>
      <description>&lt;P&gt;I should be able to, but there can be hundreds of IDs under the header. So I could copy using the below&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if series = . then series = lag_series;&lt;/P&gt;&lt;P&gt;if series = . &amp;amp; lag_series = . then series = lag2_series;&lt;/P&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am looking to get around this though.&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 14:40:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568802#M160198</guid>
      <dc:creator>Jacob3</dc:creator>
      <dc:date>2019-06-25T14:40:17Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568806#M160202</link>
      <description>&lt;P&gt;An easier way to copy the header information would be by using the RETAIN statement for each of the header variables. Once they are all filled in you can use proc transpose.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here's a good walk through&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.mwsug.org/proceedings/2009/stats/MWSUG-2009-D14.pdf" target="_blank"&gt;https://www.mwsug.org/proceedings/2009/stats/MWSUG-2009-D14.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214163.htm" target="_blank"&gt;http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214163.htm&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 14:48:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568806#M160202</guid>
      <dc:creator>alexgouv</dc:creator>
      <dc:date>2019-06-25T14:48:12Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568823#M160209</link>
      <description>&lt;P&gt;Thanks!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 25 Jun 2019 15:22:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568823#M160209</guid>
      <dc:creator>Jacob3</dc:creator>
      <dc:date>2019-06-25T15:22:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568834#M160212</link>
      <description>&lt;P&gt;You can use this macro statement logic to loop through the dataset filling in the blank values for Type/Maturity/Series based on the last observation containing a non-blank value (only for observations where those values are presently blank).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then you can use the logic that I previously supplied:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%MACRO FILL_LOOP;
	%DO %UNTIL("&amp;amp;BLNKSum."="0");
		DATA WORK.Have;
			SET WORK.Have;
			RETAIN BLNKSum;
			LAG_Type=LAG(Type);
			LAG_Maturity=LAG(Maturity);
			LAG_Series=LAG(Series);

			IF Type=' ' THEN Type=LAG_Type;
			IF Maturity=. THEN Maturity=LAG_Maturity;
			IF Series=' ' THEN Series=LAG_Series;
			BLNKSum=SUM(CMISS(Type),CMISS(Maturity),CMISS(Series),BLNKSUM);
			CALL SYMPUTX('BLNKSum',BLNKSum);
			%PUT &amp;amp;=BLNKSum.;
		RUN;
		DATA WORK.HAVE(DROP=BLNKSum LAG_Type LAG_Maturity LAG_Series); SET WORK.HAVE; RUN;
	%END;
%MEND FILL_LOOP;
%FILL_LOOP;

PROC SORT DATA=WORK.Have; BY Type Maturity Series ID; RUN;

PROC TRANSPOSE DATA=WORK.Have out=WORK.WANT (drop=_name_) prefix=ID_;
	var	ID;
	by Type Maturity Series;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 25 Jun 2019 15:48:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568834#M160212</guid>
      <dc:creator>tsap</dc:creator>
      <dc:date>2019-06-25T15:48:11Z</dc:date>
    </item>
    <item>
      <title>Re: How to collapse multiple observations into one</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568842#M160214</link>
      <description>&lt;P&gt;Here is an even easier option to clean the data of blank values and then transpose (that doesn't require the macro looping):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA WORK.Have (DROP= Type2 Maturity2 Series2);
	SET WORK.Have;
	RETAIN Type2 Maturity2 Series2;
		 IF Type NE ' ' THEN Type2=Type;
	ELSE IF Type = ' ' 	THEN Type=Type2;

		 IF Maturity NE . 	THEN Maturity2=Maturity;
	ELSE IF Maturity = .	THEN Maturity=Maturity2;

		 IF Series NE ' ' 	THEN Series2=Series;
	ELSE IF Series = ' '	THEN Series=Series2;
RUN;


PROC SORT DATA=WORK.Have; BY Type Maturity Series ID; RUN;

PROC TRANSPOSE DATA=WORK.Have out=WORK.WANT (drop=_name_) prefix=ID_;
	var	ID;
	by Type Maturity Series;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 25 Jun 2019 15:47:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-collapse-multiple-observations-into-one/m-p/568842#M160214</guid>
      <dc:creator>tsap</dc:creator>
      <dc:date>2019-06-25T15:47:35Z</dc:date>
    </item>
  </channel>
</rss>

