<?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: Macro Outputting Extra Rows in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406139#M279222</link>
    <description>&lt;P&gt;This is an intense macro, but this is what I was able to do to get it to work.&amp;nbsp; If anyone comes up with anything that is more simple, please feel free to pass it along!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data timepoints;
	length visitnum 8 ptpt $12 egnum 8;
	input visitnum ptpt $ egnum;
	cards;
30001	PREDOSE			0.1
30001	PREDOSE			0.2
30001	PREDOSE			0.3
30001	4HR_POSTDOSE	4.0
30015	PREDOSE			0.0
30015	4HR_POSTDOSE	4.0
;
run;
data subj;
	length subjid $11 visitnum 8;
	input subjid $ visitnum;
	cards;
101-001-001	10001
101-001-001	30001
101-001-001	30015
101-001-001	30029
101-001-001	30043
101-001-001	70001
101-003-003	10001
101-003-003	20001
101-003-003	30001
101-003-003	30015
101-003-003	30029
101-003-003	30043
101-003-003	70001
101-003-004	10001
101-003-004	30001
101-003-004	30015
101-003-004	30029
101-003-004	30043
101-003-004	70001
;
run;

%macro expand();
	proc sql noprint;
		select compress(put(count(distinct visitnum),best.)) into :nvisits from timepoints;
		select distinct visitnum into :visit1-:visit&amp;amp;nvisits. from timepoints;
		%do i=1 %to &amp;amp;nvisits.;
			select compress(put(count(*),best.)) into :ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i. from timepoints where visitnum=&amp;amp;&amp;amp;visit&amp;amp;i.;
			select ptpt into :ptpt_&amp;amp;&amp;amp;visit&amp;amp;i.._1-:ptpt_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;&amp;amp;&amp;amp;&amp;amp;ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i. from timepoints where visitnum=&amp;amp;&amp;amp;visit&amp;amp;i.;
			select egnum into :egnum_&amp;amp;&amp;amp;visit&amp;amp;i.._1-:egnum_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;&amp;amp;&amp;amp;&amp;amp;ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i.. from timepoints where visitnum=&amp;amp;&amp;amp;visit&amp;amp;i.;
		%end;
	quit;

	data subj_expand;
		length ptpt $80;
		set subj;
		if visitnum=&amp;amp;visit1. then do;
			%do j=1 %to &amp;amp;&amp;amp;ntmpts_&amp;amp;visit1.;
				ptpt="&amp;amp;&amp;amp;ptpt_&amp;amp;visit1._&amp;amp;j.";
				egnum=&amp;amp;&amp;amp;egnum_&amp;amp;visit1._&amp;amp;j.;
				output;
			%end;
		end;
		%do i=2 %to &amp;amp;nvisits.;
			else if visitnum=&amp;amp;&amp;amp;visit&amp;amp;i. then do;
				%do j=1 %to &amp;amp;&amp;amp;&amp;amp;&amp;amp;ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i.;
					ptpt="&amp;amp;&amp;amp;&amp;amp;&amp;amp;ptpt_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;j.";
					egnum=&amp;amp;&amp;amp;&amp;amp;&amp;amp;egnum_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;j.;
					output;
				%end;
			end;
		%end;
			else output;
	run;
%mend expand;
%expand;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 20 Oct 2017 20:21:03 GMT</pubDate>
    <dc:creator>djbateman</dc:creator>
    <dc:date>2017-10-20T20:21:03Z</dc:date>
    <item>
      <title>Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406025#M279215</link>
      <description>&lt;P&gt;Okay.&amp;nbsp; I have been racking my brain over this all day.&amp;nbsp; I need some insight here.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For simplicity, I have a table with a list of subjects and the visits for each subject.&amp;nbsp; I have another table of timepoints that lists the timepoints for each specific visits:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data timepoints;
	length visitnum 8 ptpt $12 egnum 8;
	input visitnum ptpt $ egnum;
	cards;
30001	PREDOSE			0.1
30001	PREDOSE			0.2
30001	PREDOSE			0.3
30001	4HR_POSTDOSE	4.0
30015	PREDOSE			0.0
30015	4HR_POSTDOSE	4.0
;
run;
data subj;
	length subjid $11 visitnum 8;
	input subjid $ visitnum;
	cards;
101-001-001	10001
101-001-001	30001
101-001-001	30015
101-001-001	30029
101-001-001	30043
101-001-001	70001
101-003-003	10001
101-003-003	20001
101-003-003	30001
101-003-003	30015
101-003-003	30029
101-003-003	30043
101-003-003	70001
101-003-004	10001
101-003-004	30001
101-003-004	30015
101-003-004	30029
101-003-004	30043
101-003-004	70001
;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I need to generalize a program to expand the rows for each subject/visit based on number of timepoints for each visit (the timepoints table will be different for every study).&amp;nbsp; I have been trying to create a macro&amp;nbsp;to do this, but I can't seem to get it to work.&amp;nbsp; I keep getting an extra row for VISITNUM=30001 and EGNUM=4.&amp;nbsp; I'm not sure why.&amp;nbsp; Can someone see why it runs one of the loops twice?&amp;nbsp; This is the macro:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro expand();
	proc sql;
		select compress(put(count(*),best.)) into :ntmpts from timepoints;
		select visitnum into :visit1-:visit&amp;amp;ntmpts. from timepoints;
		select ptpt into :ptpt1-:ptpt&amp;amp;ntmpts. from timepoints;
		select egnum into :egnum1-:egnum&amp;amp;ntmpts. from timepoints;
	quit;

	data subj_expand;
		length ptpt $80;
		set subj;
		%do i=1 %to &amp;amp;ntmpts.;
			if visitnum=&amp;amp;&amp;amp;visit&amp;amp;i. then do;
				ptpt="&amp;amp;&amp;amp;ptpt&amp;amp;i.";
				egnum=&amp;amp;&amp;amp;egnum&amp;amp;i.;
				output;
			end;
		%end;
		else output;
	run;
%mend expand;
%expand;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Oct 2017 16:24:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406025#M279215</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2017-10-20T16:24:22Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406027#M279216</link>
      <description>&lt;P&gt;What do you want as output?&lt;/P&gt;</description>
      <pubDate>Fri, 20 Oct 2017 16:28:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406027#M279216</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-10-20T16:28:33Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406029#M279217</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have attached an Excel file showing both what my output is and what I want it to look like.&amp;nbsp; I have highlighted the extra rows in the table that is not what I want.&lt;/P&gt;</description>
      <pubDate>Fri, 20 Oct 2017 16:41:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406029#M279217</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2017-10-20T16:41:04Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406085#M279218</link>
      <description>&lt;P&gt;Many users here don't want to download Excel files because of virus potential, others have such things blocked by security software. Also if you give us Excel we have to create a SAS data set and due to the non-existent constraints on Excel data cells the result we end up with may not have variables of the same type (numeric or character) and even values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Instructions here: &lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712" target="_blank"&gt;https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712&lt;/A&gt; will show how to turn an existing SAS data set into data step code that can be pasted into a forum code box using the {i} icon or attached as text to show exactly what you have and that we can test code against.&lt;/P&gt;</description>
      <pubDate>Fri, 20 Oct 2017 19:02:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406085#M279218</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-10-20T19:02:18Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406097#M279219</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/74"&gt;@djbateman&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I keep getting an extra row for VISITNUM=30001 and EGNUM=4.&amp;nbsp; I'm not sure why.&amp;nbsp; Can someone see why it runs one of the loops twice?&amp;nbsp; This is the macro:&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;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The Else output is only the else when &amp;amp;I = &amp;nbsp;&lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;ntmpts.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;in effect you are doing:&lt;/P&gt;
&lt;P&gt;if value =1 then do; &amp;lt;something&amp;gt;; end;&lt;/P&gt;
&lt;P&gt;if value =2 then do; &amp;lt;something&amp;gt;; end;&lt;/P&gt;
&lt;P&gt;if value =3 then do; &amp;lt;something&amp;gt;; end;&lt;/P&gt;
&lt;P&gt;if value =4 then do; &amp;lt;something&amp;gt;; end;&lt;/P&gt;
&lt;P&gt;else do; &amp;lt;something&amp;gt;; end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I might suggest building a SELECT block to only have one "else"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;select (visitnum);&lt;/P&gt;
&lt;P&gt;%do I = 1 %to &amp;amp;ntmpts;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp; when (&amp;amp;&amp;amp;visit&amp;amp;&lt;/FONT&gt;&lt;FONT color="#804040" face="SAS Monospace" size="2"&gt;i.&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;) do;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ptpt=&lt;/FONT&gt;&lt;FONT color="#800080" face="SAS Monospace" size="2"&gt;"&amp;amp;&amp;amp;ptpt&amp;amp;i."&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; egnum=&amp;amp;&amp;amp;egnum&amp;amp;&lt;/FONT&gt;&lt;FONT color="#804040" face="SAS Monospace" size="2"&gt;i.&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#ff0000" face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp; end&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;%end;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp; otherwise output;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;end;/* the select block*/&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Oct 2017 19:21:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406097#M279219</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-10-20T19:21:41Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406104#M279220</link>
      <description>&lt;P&gt;Thanks, but I don't necessarily need my table in a SAS dataset.&amp;nbsp; I just needed a nice way to display it.&amp;nbsp; Since SAS updated this community message board, we aren't able to&amp;nbsp;insert nice tables anymore.&amp;nbsp; If I just copy my table and paste it here, it typically is a big text mess.&amp;nbsp; But it seemed to come out somewhat nice here.&amp;nbsp; This is what I want&amp;nbsp;my output table to look like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ptpt&lt;/TD&gt;&lt;TD&gt;subjid&lt;/TD&gt;&lt;TD&gt;visitnum&lt;/TD&gt;&lt;TD&gt;egnum&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;10001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4HR_POSTDOSE&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30015&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4HR_POSTDOSE&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30015&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30029&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;30043&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-001-001&lt;/TD&gt;&lt;TD&gt;70001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;10001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;20001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4HR_POSTDOSE&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30015&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4HR_POSTDOSE&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30015&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30029&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;30043&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-003&lt;/TD&gt;&lt;TD&gt;70001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;10001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;0.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4HR_POSTDOSE&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30001&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PREDOSE&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30015&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4HR_POSTDOSE&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30015&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30029&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;30043&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;101-003-004&lt;/TD&gt;&lt;TD&gt;70001&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Fri, 20 Oct 2017 19:36:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406104#M279220</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2017-10-20T19:36:17Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406128#M279221</link>
      <description>&lt;P&gt;I gave the SELECT statement a try, and I ended up with fewer records than expected.&amp;nbsp; The first timepoint for each visit was created (i.e, VISITNUM=30001 &amp;amp; EGNUM=0.1 and&amp;nbsp;&lt;SPAN&gt;VISITNUM=30015 &amp;amp; EGNUM=0).&amp;nbsp; None of the other timepoints were created.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Oct 2017 20:08:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406128#M279221</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2017-10-20T20:08:12Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Outputting Extra Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406139#M279222</link>
      <description>&lt;P&gt;This is an intense macro, but this is what I was able to do to get it to work.&amp;nbsp; If anyone comes up with anything that is more simple, please feel free to pass it along!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data timepoints;
	length visitnum 8 ptpt $12 egnum 8;
	input visitnum ptpt $ egnum;
	cards;
30001	PREDOSE			0.1
30001	PREDOSE			0.2
30001	PREDOSE			0.3
30001	4HR_POSTDOSE	4.0
30015	PREDOSE			0.0
30015	4HR_POSTDOSE	4.0
;
run;
data subj;
	length subjid $11 visitnum 8;
	input subjid $ visitnum;
	cards;
101-001-001	10001
101-001-001	30001
101-001-001	30015
101-001-001	30029
101-001-001	30043
101-001-001	70001
101-003-003	10001
101-003-003	20001
101-003-003	30001
101-003-003	30015
101-003-003	30029
101-003-003	30043
101-003-003	70001
101-003-004	10001
101-003-004	30001
101-003-004	30015
101-003-004	30029
101-003-004	30043
101-003-004	70001
;
run;

%macro expand();
	proc sql noprint;
		select compress(put(count(distinct visitnum),best.)) into :nvisits from timepoints;
		select distinct visitnum into :visit1-:visit&amp;amp;nvisits. from timepoints;
		%do i=1 %to &amp;amp;nvisits.;
			select compress(put(count(*),best.)) into :ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i. from timepoints where visitnum=&amp;amp;&amp;amp;visit&amp;amp;i.;
			select ptpt into :ptpt_&amp;amp;&amp;amp;visit&amp;amp;i.._1-:ptpt_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;&amp;amp;&amp;amp;&amp;amp;ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i. from timepoints where visitnum=&amp;amp;&amp;amp;visit&amp;amp;i.;
			select egnum into :egnum_&amp;amp;&amp;amp;visit&amp;amp;i.._1-:egnum_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;&amp;amp;&amp;amp;&amp;amp;ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i.. from timepoints where visitnum=&amp;amp;&amp;amp;visit&amp;amp;i.;
		%end;
	quit;

	data subj_expand;
		length ptpt $80;
		set subj;
		if visitnum=&amp;amp;visit1. then do;
			%do j=1 %to &amp;amp;&amp;amp;ntmpts_&amp;amp;visit1.;
				ptpt="&amp;amp;&amp;amp;ptpt_&amp;amp;visit1._&amp;amp;j.";
				egnum=&amp;amp;&amp;amp;egnum_&amp;amp;visit1._&amp;amp;j.;
				output;
			%end;
		end;
		%do i=2 %to &amp;amp;nvisits.;
			else if visitnum=&amp;amp;&amp;amp;visit&amp;amp;i. then do;
				%do j=1 %to &amp;amp;&amp;amp;&amp;amp;&amp;amp;ntmpts_&amp;amp;&amp;amp;visit&amp;amp;i.;
					ptpt="&amp;amp;&amp;amp;&amp;amp;&amp;amp;ptpt_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;j.";
					egnum=&amp;amp;&amp;amp;&amp;amp;&amp;amp;egnum_&amp;amp;&amp;amp;visit&amp;amp;i.._&amp;amp;j.;
					output;
				%end;
			end;
		%end;
			else output;
	run;
%mend expand;
%expand;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 20 Oct 2017 20:21:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Outputting-Extra-Rows/m-p/406139#M279222</guid>
      <dc:creator>djbateman</dc:creator>
      <dc:date>2017-10-20T20:21:03Z</dc:date>
    </item>
  </channel>
</rss>

