<?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: Proc sgplot Waterfall graph &amp;quot;Double&amp;quot; Waterfall in Graphics Programming</title>
    <link>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217863#M8123</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes!&amp;nbsp; The highlow plot was excellent.&amp;nbsp; I may take your advice on the line plot as well.&amp;nbsp; Thanks again.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 09 Apr 2015 19:37:04 GMT</pubDate>
    <dc:creator>npylypiw</dc:creator>
    <dc:date>2015-04-09T19:37:04Z</dc:date>
    <item>
      <title>Proc sgplot Waterfall graph "Double" Waterfall</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217859#M8119</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello.&amp;nbsp; I am using the waterfall option in proc sgplot.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have an initial value (Full) and then several additions/subtractions A-E, resulting in 'Leftover'.&amp;nbsp; The code below does this perfectly.&amp;nbsp; However, I wish to further decompose 'Leftover' to attain 'Leftover2'.&amp;nbsp; I want to do this by introducing a new value F=.6.&amp;nbsp; Is there a way to do this?&amp;nbsp; My code is below, here is a link to a picture of the desired output &lt;A href="http://tinypic.com/view.php?pic=mb4tat&amp;amp;s=8" title="http://tinypic.com/view.php?pic=mb4tat&amp;amp;s=8"&gt;data Pictures, data Images, data Photos, data Videos - Image - TinyPic - Free Image Hosting, Photo Sharing &amp;amp;amp; Video Hosting&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input category $ type $ percent order;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;X Full 1 1&lt;/P&gt;&lt;P&gt;X B -.04 .&lt;/P&gt;&lt;P&gt;X A -.02 .&lt;/P&gt;&lt;P&gt;X E 0 .&lt;/P&gt;&lt;P&gt;X D .03 .&lt;/P&gt;&lt;P&gt;X C .01 .&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*additional data point*/&lt;/P&gt;&lt;P&gt;/*X F .6 .*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have(where=(percent&amp;lt;0)) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=neg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by percent;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data neg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set neg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order=_N_+1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select max(order) into :max_order from neg;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have(where=(percent&amp;gt;0 and type not in ("Full"))) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out=pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by descending percent;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order=_N_+&amp;amp;max_order.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data x_have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have(where=(type="Full")) neg pos;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=x_have;&lt;/P&gt;&lt;P&gt;by order;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sgplot data=have(where=(percent ne 0)) noautolegend;&lt;/P&gt;&lt;P&gt;waterfall category=type response=percent&amp;nbsp; / colorgroup=type dataskin=sheen datalabel name='a'&lt;/P&gt;&lt;P&gt;finalbartickvalue='Leftover';&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;xaxis display=(nolabel);&lt;/P&gt;&lt;P&gt;yaxis grid display=(nolabel) offsetmin=0;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Apr 2015 22:32:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217859#M8119</guid>
      <dc:creator>npylypiw</dc:creator>
      <dc:date>2015-04-08T22:32:32Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sgplot Waterfall graph "Double" Waterfall</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217860#M8120</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Do you want another value F=0.6 after the leftover to get a second leftover?&amp;nbsp; Waterfall does not support that.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, you could compute the low and high value of each bar yourself in datastep, including the Leftover value, followed by F=0.6 and the final Leftover2 value.&amp;nbsp; Then, use HIGHLOW plot to draw your own custom waterfall chart.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Apr 2015 23:47:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217860#M8120</guid>
      <dc:creator>Jay54</dc:creator>
      <dc:date>2015-04-08T23:47:45Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sgplot Waterfall graph "Double" Waterfall</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217861#M8121</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks, Sanjay.&amp;nbsp; I took your advice and worked through this in data steps and highlow.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input category $ type $ percent order;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;X Full 1 1&lt;/P&gt;&lt;P&gt;X B -.04 .&lt;/P&gt;&lt;P&gt;X A -.02 .&lt;/P&gt;&lt;P&gt;X E 0 .&lt;/P&gt;&lt;P&gt;X D .03 .&lt;/P&gt;&lt;P&gt;X C .01 .&lt;/P&gt;&lt;P&gt;X F .6 .&lt;/P&gt;&lt;P&gt;X sum1 . .&lt;/P&gt;&lt;P&gt;X sum2 . .&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select sum(percent)&lt;/P&gt;&lt;P&gt;&amp;nbsp; into :sum&lt;/P&gt;&lt;P&gt;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp; where type in ('A','B','C','D','E');&lt;/P&gt;&lt;P&gt;&amp;nbsp; select percent&lt;/P&gt;&lt;P&gt;&amp;nbsp; into :F&lt;/P&gt;&lt;P&gt;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp; where type='F';&lt;/P&gt;&lt;P&gt;&amp;nbsp; select percent&lt;/P&gt;&lt;P&gt;&amp;nbsp; into :maxperc&lt;/P&gt;&lt;P&gt;&amp;nbsp; from have&lt;/P&gt;&lt;P&gt;&amp;nbsp; where type="Full";&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have_mod;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type='sum1' then percent=1+&amp;amp;sum.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type='sum2' then percent=1+&amp;amp;sum.-&amp;amp;F.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have_mod(where=(percent&amp;lt;0)) &lt;/P&gt;&lt;P&gt;&amp;nbsp; out=neg;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by percent;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data neg;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set neg;&lt;/P&gt;&lt;P&gt;&amp;nbsp; order=_N_+1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select max(order) into :max_neg from neg;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have_mod(where=(percent&amp;gt;0 and type not in ("Full","sum1","sum2","F"))) &lt;/P&gt;&lt;P&gt;&amp;nbsp; out=pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by descending percent;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp; order=_N_+&amp;amp;max_neg.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select max(order) into :max_pos from pos;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data x_have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have_mod(where=(type in ("Full", "F", "sum1", "sum2"))) neg pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type='sum1' then order=1+&amp;amp;max_pos.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type='F' then order=2+&amp;amp;max_pos.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type='sum2' then order=3+&amp;amp;max_pos.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=x_have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by order;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select percent, order&lt;/P&gt;&lt;P&gt;&amp;nbsp; into :sum1, :ordersum1&lt;/P&gt;&lt;P&gt;&amp;nbsp; from x_have&lt;/P&gt;&lt;P&gt;&amp;nbsp; where type='sum1';&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set x_have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by category;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.category then sumpercent=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; sumpercent+percent;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type in ('sum1','F','sum2') then sumpercent=percent;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type in ('Full','sum1','sum2') then high=sumpercent;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if type='F' then high=&amp;amp;sum1.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if order=&amp;amp;ordersum1.-1 then high=&amp;amp;sum1.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if order=2 then high=&amp;amp;maxperc.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if percent&amp;gt;0 then high=sumpercent;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if percent&amp;lt;0 then high=sumpercent+abs(percent);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if type in ('Full','sum1','sum2') then low=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if percent&amp;lt;0 then low=sumpercent;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if type='F' then low=high-sumpercent;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if percent&amp;gt;0 then low=sumpercent-percent;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sgplot data=want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; highlow x=type high=high low=low / group=type type=bar &lt;/P&gt;&lt;P&gt;&amp;nbsp; groupdisplay=cluster highlabel=percent lineattrs=graphoutlines&lt;/P&gt;&lt;P&gt;&amp;nbsp; dataskin=matte;&lt;/P&gt;&lt;P&gt;&amp;nbsp; xaxis display=(nolabel noticks);&lt;/P&gt;&lt;P&gt;&amp;nbsp; yaxis offsetmin=0;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Apr 2015 02:50:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217861#M8121</guid>
      <dc:creator>npylypiw</dc:creator>
      <dc:date>2015-04-09T02:50:27Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sgplot Waterfall graph "Double" Waterfall</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217862#M8122</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Cool.&amp;nbsp; Did you get what you wanted?&amp;nbsp; You can overlay a step plot or a series plot to join the end and start points for each bar segment.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="Waterfall_HighLow.png" class="jive-image-thumbnail jive-image" src="https://communities.sas.com/legacyfs/online/9980_Waterfall_HighLow.png" width="450" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Apr 2015 17:54:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217862#M8122</guid>
      <dc:creator>Jay54</dc:creator>
      <dc:date>2015-04-09T17:54:30Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sgplot Waterfall graph "Double" Waterfall</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217863#M8123</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes!&amp;nbsp; The highlow plot was excellent.&amp;nbsp; I may take your advice on the line plot as well.&amp;nbsp; Thanks again.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Apr 2015 19:37:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Proc-sgplot-Waterfall-graph-quot-Double-quot-Waterfall/m-p/217863#M8123</guid>
      <dc:creator>npylypiw</dc:creator>
      <dc:date>2015-04-09T19:37:04Z</dc:date>
    </item>
  </channel>
</rss>

