<p></p><p></p><div class="quote"><b>以下是引用<i>losttemple</i>在2008-3-12 8:46:00的发言:</b><br/><p>SAS的重要性体现在数据清洗阶段,而不是建模阶段。<br/>我觉得ku对楼主的理解有误。楼主的意思是与其他软件相比,SAS的data manipulation和manage能力最强。这也是SAS为什么这么被广泛使用的原因(至少,在我从事的生物医药领域完全是SAS的天下)。</p></div><p>数据挖掘、分析,数据清洗只是其中一个阶段,至于我为什么这么说,看这个presentation就知道了,不用我做的是因为省得再引起其他话题,诸如模型可行性、优化算法等,多的就不说了。如果能看得懂的话,应该不难明白。
</p><p></p><div class="quote"><b>以下是引用<i>wolfcrying</i>在2008-3-12 11:50:00的发言:</b><br/><p>还有就是善意地提示kuhasu,不要轻信SALES或者Gartner的排名,我见过的Sales太多了。做BI的厂商都可以拿出各种排名说明90%的fortune客户是他们的客户,但是每个公司都只会买各产品最精华的部分,搭配进行使用。SAS在分析领域是绝对的王者,并不意味着它在数据挖掘整个链条的各环节都能称霸。</p><p>另外,对于企业来讲,衡量模型的好坏不能只看LIFT,KS,GINI,ROC等性能指标,更重要的是在性能满足要求的前提下模型能稳定运行。</p><p>很简单的一个问题,比如国内的各大银行,每天需要从几十个数据库系统里抽取上万张表,这样的ETL作业SAS行吗?在稳定性兼容性方面,SAS还有很长的路要走。</p><p>我跟这个坛里很多同志一样,是SAS的忠实FANS,爱护它的正确做法是理智看待它的优劣。尤其是讨论问题的时候,要基于事实,而不是推测,猜想。“应该”这个词更多地是用于建议,而不是论证</p></div><p></p><p>SALES没人信。但是Gartner的有什么问题吗?BI的厂商都可以拿出各种排名说明--举例说明:)</p><p>SAS在分析领域是绝对的王者,并不意味着它在数据挖掘整个链条的各环节都能称霸。--这是一定的,sas不少组件的确很垃圾。在分析方面R倒是不错。举个例子,SVM在去年9月后的sas EM才出现,而且没有任何说明,原因是开发者退休了,没人接班。。。。</p><p>“另外,对于企业来讲,衡量模型的好坏不能只看LIFT,KS,GINI,ROC等性能指标,更重要的是在性能满足要求的前提下模型能稳定运行。”---概念不清,首先数据挖掘在建模的时候是要有test data来验证模型的稳定性的?防止过度拟合。你们不做吗?经过测试验证的最好准确度的,不就是最好性能和稳定的?除非你模型建的有问题。至于兼容性?话从何来?sas的模型包支持java,vb,c,有什么不兼容的?如果你指的是换了情况模型不准了,那绝对是建模的水平问题。</p><p>“很简单的一个问题,比如国内的各大银行,每天需要从几十个数据库系统里抽取上万张表,这样的ETL作业SAS行吗?”--首先,数据库抽取上万张表最大的前提是硬件以及你们选区的数据库产品。如果你说sas替代所有数据库,erp系统,那叫开玩笑。还有ETL方面,sas做的也还行,一个Data Integration Studio就可以解决各种各样形式的报表整合问题。至于报表样式,sas的建立的dashboard都是不错的,BPM和BI软件的结合比较好。至于bug的问题,引用晚安那老头一句话“Oracle发布的产品里面有超过10,000个bug。这太可怕了。”而实际上SAS和Oracle还是不错的搭档。</p><p> </p><p><img alt="" src="http://support.sas.com/kb/26/addl/fusion26113_1_grdash_dash6.gif" border="0"/></p><p> /* This example uses SAS/GRAPH software to generate a version of the marketing<br/>analysis dashboard described on p. 201 of "Information Dashboard Design"<br/>(Few, Stephen. 2006. Sebastopol, CA. O'Reilly Media, Inc.). */<br/><br/>/* Specify the name for the output file. */<br/>%let name=webMarketDash;<br/>filename odsout '.';<br/><br/>/* Set the background color for the dashboard. */<br/>%let backcolor=cxFFFFEb;<br/><br/>/* Set the colors for the background ranges in the bullet graphs. */<br/>%let bullet1=gray99;<br/>%let bullet2=graycc;<br/>%let bullet3=grayef;<br/><br/>/* Set the color for bars and legend in plot7 and plot12. */<br/>%let revenue_color=graybb;<br/><br/>/* Set the color for major titles and lines to split the dashboard into sections. */<br/>%let majorcolor=cx50A6C2; <br/><br/>/* Set the color for dark text and graphics and light text and graphics. */<br/>%let black=black;<br/>%let lighttext=gray88;<br/><br/>/* Define fonts for indicator and dashboard text. */<br/>%let ftext='swiss';<br/><br/>/* Define the location of the HTML page that supplies drill-down details <br/> for the indicator. If you don't have Internet access, you must put<br/> the target HTML file where your browser can access it, then change the <br/> following URL to point to your location. */<br/>%let hardcoded_drilldown=http://support.sas.com/rnd/datavisualization/dashboards/generic_drilldown.htm; <br/><br/>/***************************************************************************/<br/>/* Create sample data sources for the dashboard indicators. */<br/><br/>/* Data for plot1 (MTD Compared to Target) */<br/>data data1;<br/> format value percentn6.0;<br/> input barname $ 1-10 value target;<br/> datalines;<br/>Visitors 0.90 0.75<br/>Orders 1.60 0.60<br/>;<br/>run;<br/><br/>/* Data for plot2 (Percent of Total Visitors Today) */<br/>data data2;<br/> format value percentn6.0;<br/> input barname $ 1-10 value target target2;<br/> datalines;<br/>Registered 0.55 0.30 0.50<br/>Repeat 0.90 0.60 0.80<br/>;<br/>run;<br/><br/>/* Data for plot3 (Visitors - Last 12 months) */<br/>data data3;<br/> format visitor_deviation percentn6.0;<br/> input year month visitor_deviation;<br/> datalines;<br/>2004 4 .30<br/>2004 5 .27<br/>2004 6 .34<br/>2004 7 .36<br/>2004 8 .32<br/>2004 9 .08<br/>2004 10 0<br/>2004 11 .09<br/>2004 12 .02<br/>2005 1 .05<br/>2005 2 .02<br/>2005 3 -.04<br/>;<br/>run;<br/><br/>/* Data for plot4 (Visitors - This month) */<br/>data data4;<br/> format visitor_deviation percentn6.0;<br/> input days visitor_deviation;<br/> datalines;<br/> 1 .08<br/> 2 -.02<br/> 3 -.02<br/> 4 .10<br/> 5 .02<br/> 6 .03<br/> 7 .06<br/> 8 -.20<br/> 9 -.27<br/>10 -.30<br/>11 .06<br/>12 .02<br/>;<br/>run;<br/><br/>/* Data for plot5 (Visitors - Today) */<br/>data data5;<br/> format visitor_deviation percentn6.0;<br/> input hours visitor_deviation;<br/> datalines;<br/> 1 .08<br/> 2 -.01<br/> 3 .04<br/> 4 -.04<br/> 5 .15<br/> 6 .03<br/> 7 .10<br/> 8 .04<br/> 9 -.05<br/>10 -.08<br/>11 -.05<br/>12 -.02<br/>13 -.09<br/>14 .02<br/>;<br/>run;<br/><br/>/* Data for plot6 (Products - Sparklines) */<br/>/* This sample uses full product names for simplicity. In a production <br/> environment, these would probably be stored by a product code number <br/> rather than having the full text of the product name with each line <br/> of data. */<br/>data data6;<br/> input product $ 1-40 timestamp percent_of_target;<br/> datalines;<br/>Skirt - Business Casual - Black 1 .60 <br/>Skirt - Business Casual - Black 2 .60 <br/>Skirt - Business Casual - Black 3 .50 <br/>Skirt - Business Casual - Black 4 .50 <br/>Skirt - Business Casual - Black 5 .50 <br/>Skirt - Business Casual - Black 6 .50 <br/>Skirt - Business Casual - Black 7 .50 <br/>Skirt - Business Casual - Black 8 .50 <br/>Skirt - Business Casual - Black 9 .40 <br/>Skirt - Business Casual - Black 10 .40 <br/>Skirt - Business Casual - Black 11 .40 <br/>Skirt - Business Casual - Black 12 .50 <br/>Skirt - Business Casual - Black 13 .50 <br/>Skirt - Business Casual - Black 14 .55 <br/>Skirt - Business Casual - Black 15 .55 <br/>Skirt - Business Casual - Black 16 .55 <br/>Skirt - Business Casual - Black 17 .55 <br/>Skirt - Business Casual - Black 18 .90 <br/>Skirt - Business Casual - Black 19 .65 <br/>Skirt - Business Casual - Black 20 .65 <br/>Skirt - Business Casual - Black 21 .70 <br/>Skirt - Business Casual - Black 22 .70 <br/>Skirt - Business Casual - Black 23 .80 <br/>Skirt - Business Casual - Black 24 1.00 <br/>Skirt - Business Casual - Black 25 1.03 <br/>Skirt - Business Casual - Black 26 1.10 <br/>Skirt - Business Casual - Black 27 1.25 <br/>Skirt - Business Casual - Black 28 1.30 <br/>Skirt - Business Casual - Black 29 1.40 <br/>Skirt - Business Casual - Black 30 1.50 <br/>Shirt - Oxford - White 1 1.10 <br/>Shirt - Oxford - White 2 1.10 <br/>Shirt - Oxford - White 3 1.10 <br/>Shirt - Oxford - White 4 1.10 <br/>Shirt - Oxford - White 5 1.00 <br/>Shirt - Oxford - White 6 1.00 <br/>Shirt - Oxford - White 7 1.00 <br/>Shirt - Oxford - White 8 1.00 <br/>Shirt - Oxford - White 9 .90 <br/>Shirt - Oxford - White 10 .90 <br/>Shirt - Oxford - White 11 .90 <br/>Shirt - Oxford - White 12 .80 <br/>Shirt - Oxford - White 13 .80 <br/>Shirt - Oxford - White 14 .80 <br/>Shirt - Oxford - White 15 .80 <br/>Shirt - Oxford - White 16 .80 <br/>Shirt - Oxford - White 17 .70 <br/>Shirt - Oxford - White 18 .70 <br/>Shirt - Oxford - White 19 .70 <br/>Shirt - Oxford - White 20 .70 <br/>Shirt - Oxford - White 21 .70 <br/>Shirt - Oxford - White 22 .70 <br/>Shirt - Oxford - White 23 .80 <br/>Shirt - Oxford - White 24 .80 <br/>Shirt - Oxford - White 25 .80 <br/>Shirt - Oxford - White 26 .80 <br/>Shirt - Oxford - White 27 .85 <br/>Shirt - Oxford - White 28 .85 <br/>Shirt - Oxford - White 29 .90 <br/>Shirt - Oxford - White 30 .90 <br/>Shirt - Oxford - Blue 1 1.00 <br/>Shirt - Oxford - Blue 2 1.00 <br/>Shirt - Oxford - Blue 3 1.00 <br/>Shirt - Oxford - Blue 4 1.00 <br/>Shirt - Oxford - Blue 5 1.00 <br/>Shirt - Oxford - Blue 6 1.20 <br/>Shirt - Oxford - Blue 7 1.20 <br/>Shirt - Oxford - Blue 8 1.20 <br/>Shirt - Oxford - Blue 9 1.20 <br/>Shirt - Oxford - Blue 10 1.20 <br/>Shirt - Oxford - Blue 11 1.20 <br/>Shirt - Oxford - Blue 12 1.20 <br/>Shirt - Oxford - Blue 13 1.20 <br/>Shirt - Oxford - Blue 14 1.20 <br/>Shirt - Oxford - Blue 15 1.20 <br/>Shirt - Oxford - Blue 16 1.20 <br/>Shirt - Oxford - Blue 17 1.20 <br/>Shirt - Oxford - Blue 18 1.20 <br/>Shirt - Oxford - Blue 19 1.20 <br/>Shirt - Oxford - Blue 20 .70 <br/>Shirt - Oxford - Blue 21 .70 <br/>Shirt - Oxford - Blue 22 .70 <br/>Shirt - Oxford - Blue 23 1.30 <br/>Shirt - Oxford - Blue 24 1.30 <br/>Shirt - Oxford - Blue 25 1.20 <br/>Shirt - Oxford - Blue 26 1.10 <br/>Shirt - Oxford - Blue 27 1.10 <br/>Shirt - Oxford - Blue 28 .95 <br/>Shirt - Oxford - Blue 29 .80 <br/>Shirt - Oxford - Blue 30 .70 <br/>Men's Pants - Chino - Beige 1 1.00 <br/>Men's Pants - Chino - Beige 2 1.00 <br/>Men's Pants - Chino - Beige 3 1.00 <br/>Men's Pants - Chino - Beige 4 1.00 <br/>Men's Pants - Chino - Beige 5 1.00 <br/>Men's Pants - Chino - Beige 6 1.00 <br/>Men's Pants - Chino - Beige 7 1.00 <br/>Men's Pants - Chino - Beige 8 1.00 <br/>Men's Pants - Chino - Beige 9 1.00 <br/>Men's Pants - Chino - Beige 10 1.10 <br/>Men's Pants - Chino - Beige 11 1.10 <br/>Men's Pants - Chino - Beige 12 1.10 <br/>Men's Pants - Chino - Beige 13 1.10 <br/>Men's Pants - Chino - Beige 14 1.10 <br/>Men's Pants - Chino - Beige 15 1.10 <br/>Men's Pants - Chino - Beige 16 1.10 <br/>Men's Pants - Chino - Beige 17 1.10 <br/>Men's Pants - Chino - Beige 18 1.10 <br/>Men's Pants - Chino - Beige 19 1.10 <br/>Men's Pants - Chino - Beige 20 1.20 <br/>Men's Pants - Chino - Beige 21 1.20 <br/>Men's Pants - Chino - Beige 22 1.20 <br/>Men's Pants - Chino - Beige 23 1.20 <br/>Men's Pants - Chino - Beige 24 1.20 <br/>Men's Pants - Chino - Beige 25 1.30 <br/>Men's Pants - Chino - Beige 26 1.30 <br/>Men's Pants - Chino - Beige 27 1.30 <br/>Men's Pants - Chino - Beige 28 1.30 <br/>Men's Pants - Chino - Beige 29 1.30 <br/>Men's Pants - Chino - Beige 30 1.30 <br/>Blouse - Business Dress - White 1 0.90 <br/>Blouse - Business Dress - White 2 0.90 <br/>Blouse - Business Dress - White 3 0.90 <br/>Blouse - Business Dress - White 4 0.80 <br/>Blouse - Business Dress - White 5 0.80 <br/>Blouse - Business Dress - White 6 0.90 <br/>Blouse - Business Dress - White 7 0.90 <br/>Blouse - Business Dress - White 8 0.90 <br/>Blouse - Business Dress - White 9 0.95 <br/>Blouse - Business Dress - White 10 1.00 <br/>Blouse - Business Dress - White 11 1.00 <br/>Blouse - Business Dress - White 12 1.05 <br/>Blouse - Business Dress - White 13 1.05 <br/>Blouse - Business Dress - White 14 1.10 <br/>Blouse - Business Dress - White 15 1.20 <br/>Blouse - Business Dress - White 16 1.30 <br/>Blouse - Business Dress - White 17 1.40 <br/>Blouse - Business Dress - White 18 1.50 <br/>Blouse - Business Dress - White 19 1.60 <br/>Blouse - Business Dress - White 20 1.40 <br/>Blouse - Business Dress - White 21 1.20 <br/>Blouse - Business Dress - White 22 1.00 <br/>Blouse - Business Dress - White 23 0.95 <br/>Blouse - Business Dress - White 24 0.90 <br/>Blouse - Business Dress - White 25 0.85 <br/>Blouse - Business Dress - White 26 0.80 <br/>Blouse - Business Dress - White 27 0.80 <br/>Blouse - Business Dress - White 28 0.75 <br/>Blouse - Business Dress - White 29 0.75 <br/>Blouse - Business Dress - White 30 0.75 <br/>Shirt - Fitted Dress - White 1 0.40 <br/>Shirt - Fitted Dress - White 2 0.50 <br/>Shirt - Fitted Dress - White 3 0.50 <br/>Shirt - Fitted Dress - White 4 0.60 <br/>Shirt - Fitted Dress - White 5 0.70 <br/>Shirt - Fitted Dress - White 6 0.80 <br/>Shirt - Fitted Dress - White 7 0.90 <br/>Shirt - Fitted Dress - White 8 0.90 <br/>Shirt - Fitted Dress - White 9 0.95 <br/>Shirt - Fitted Dress - White 10 1.00 <br/>Shirt - Fitted Dress - White 11 1.00 <br/>Shirt - Fitted Dress - White 12 1.05 <br/>Shirt - Fitted Dress - White 13 1.05 <br/>Shirt - Fitted Dress - White 14 1.10 <br/>Shirt - Fitted Dress - White 15 1.20 <br/>Shirt - Fitted Dress - White 16 1.30 <br/>Shirt - Fitted Dress - White 17 1.40 <br/>Shirt - Fitted Dress - White 18 1.40 <br/>Shirt - Fitted Dress - White 19 1.30 <br/>Shirt - Fitted Dress - White 20 1.30 <br/>Shirt - Fitted Dress - White 21 1.20 <br/>Shirt - Fitted Dress - White 22 1.20 <br/>Shirt - Fitted Dress - White 23 1.25 <br/>Shirt - Fitted Dress - White 24 1.30 <br/>Shirt - Fitted Dress - White 25 1.30 <br/>Shirt - Fitted Dress - White 26 1.35 <br/>Shirt - Fitted Dress - White 27 1.35 <br/>Shirt - Fitted Dress - White 28 1.40 <br/>Shirt - Fitted Dress - White 29 1.40 <br/>Shirt - Fitted Dress - White 30 1.45 <br/>Men's Pants - Dress Cuffs -Black 1 1.10 <br/>Men's Pants - Dress Cuffs -Black 2 1.08 <br/>Men's Pants - Dress Cuffs -Black 3 1.05 <br/>Men's Pants - Dress Cuffs -Black 4 1.02 <br/>Men's Pants - Dress Cuffs -Black 5 1.01 <br/>Men's Pants - Dress Cuffs -Black 6 1.00 <br/>Men's Pants - Dress Cuffs -Black 7 0.95 <br/>Men's Pants - Dress Cuffs -Black 8 0.95 <br/>Men's Pants - Dress Cuffs -Black 9 0.90 <br/>Men's Pants - Dress Cuffs -Black 10 0.80 <br/>Men's Pants - Dress Cuffs -Black 11 0.60 <br/>Men's Pants - Dress Cuffs -Black 12 0.65 <br/>Men's Pants - Dress Cuffs -Black 13 0.55 <br/>Men's Pants - Dress Cuffs -Black 14 0.50 <br/>Men's Pants - Dress Cuffs -Black 15 0.40 <br/>Men's Pants - Dress Cuffs -Black 16 0.40 <br/>Men's Pants - Dress Cuffs -Black 17 0.30 <br/>Men's Pants - Dress Cuffs -Black 18 0.30 <br/>Men's Pants - Dress Cuffs -Black 19 0.20 <br/>Men's Pants - Dress Cuffs -Black 20 0.20 <br/>Men's Pants - Dress Cuffs -Black 21 0.30 <br/>Men's Pants - Dress Cuffs -Black 22 0.30 <br/>Men's Pants - Dress Cuffs -Black 23 0.45 <br/>Men's Pants - Dress Cuffs -Black 24 0.40 <br/>Men's Pants - Dress Cuffs -Black 25 0.50 <br/>Men's Pants - Dress Cuffs -Black 26 0.55 <br/>Men's Pants - Dress Cuffs -Black 27 0.65 <br/>Men's Pants - Dress Cuffs -Black 28 0.70 <br/>Men's Pants - Dress Cuffs -Black 29 0.80 <br/>Men's Pants - Dress Cuffs -Black 30 0.90 <br/>Women's Pants - Chino - Beige 1 0.60 <br/>Women's Pants - Chino - Beige 2 0.58 <br/>Women's Pants - Chino - Beige 3 0.65 <br/>Women's Pants - Chino - Beige 4 0.52 <br/>Women's Pants - Chino - Beige 5 0.61 <br/>Women's Pants - Chino - Beige 6 0.60 <br/>Women's Pants - Chino - Beige 7 0.65 <br/>Women's Pants - Chino - Beige 8 0.65 <br/>Women's Pants - Chino - Beige 9 0.60 <br/>Women's Pants - Chino - Beige 10 0.60 <br/>Women's Pants - Chino - Beige 11 0.70 <br/>Women's Pants - Chino - Beige 12 0.75 <br/>Women's Pants - Chino - Beige 13 0.85 <br/>Women's Pants - Chino - Beige 14 0.80 <br/>Women's Pants - Chino - Beige 15 0.90 <br/>Women's Pants - Chino - Beige 16 1.00 <br/>Women's Pants - Chino - Beige 17 1.20 <br/>Women's Pants - Chino - Beige 18 1.20 <br/>Women's Pants - Chino - Beige 19 1.10 <br/>Women's Pants - Chino - Beige 20 1.10 <br/>Women's Pants - Chino - Beige 21 1.05 <br/>Women's Pants - Chino - Beige 22 1.05 <br/>Women's Pants - Chino - Beige 23 1.00 <br/>Women's Pants - Chino - Beige 24 1.00 <br/>Women's Pants - Chino - Beige 25 0.90 <br/>Women's Pants - Chino - Beige 26 0.85 <br/>Women's Pants - Chino - Beige 27 0.75 <br/>Women's Pants - Chino - Beige 28 0.70 <br/>Women's Pants - Chino - Beige 29 0.60 <br/>Women's Pants - Chino - Beige 30 0.60 <br/>Skirt - Pleated - Beige 1 .30 <br/>Skirt - Pleated - Beige 2 .30 <br/>Skirt - Pleated - Beige 3 .30 <br/>Skirt - Pleated - Beige 4 .35 <br/>Skirt - Pleated - Beige 5 .40 <br/>Skirt - Pleated - Beige 6 .40 <br/>Skirt - Pleated - Beige 7 .40 <br/>Skirt - Pleated - Beige 8 .40 <br/>Skirt - Pleated - Beige 9 .40 <br/>Skirt - Pleated - Beige 10 .40 <br/>Skirt - Pleated - Beige 11 .45 <br/>Skirt - Pleated - Beige 12 .50 <br/>Skirt - Pleated - Beige 13 .50 <br/>Skirt - Pleated - Beige 14 .55 <br/>Skirt - Pleated - Beige 15 .55 <br/>Skirt - Pleated - Beige 16 .50 <br/>Skirt - Pleated - Beige 17 .50 <br/>Skirt - Pleated - Beige 18 .60 <br/>Skirt - Pleated - Beige 19 .60 <br/>Skirt - Pleated - Beige 20 .65 <br/>Skirt - Pleated - Beige 21 .70 <br/>Skirt - Pleated - Beige 22 .70 <br/>Skirt - Pleated - Beige 23 .85 <br/>Skirt - Pleated - Beige 24 1.00 <br/>Skirt - Pleated - Beige 25 1.05 <br/>Skirt - Pleated - Beige 26 1.10 <br/>Skirt - Pleated - Beige 27 1.20 <br/>Skirt - Pleated - Beige 28 1.30 <br/>Skirt - Pleated - Beige 29 1.30 <br/>Skirt - Pleated - Beige 30 1.40 <br/>Dress - Summer Casual - White 1 .30 <br/>Dress - Summer Casual - White 2 .30 <br/>Dress - Summer Casual - White 3 .30 <br/>Dress - Summer Casual - White 4 .35 <br/>Dress - Summer Casual - White 5 .40 <br/>Dress - Summer Casual - White 6 .40 <br/>Dress - Summer Casual - White 7 .40 <br/>Dress - Summer Casual - White 8 .40 <br/>Dress - Summer Casual - White 9 .40 <br/>Dress - Summer Casual - White 10 .45 <br/>Dress - Summer Casual - White 11 .50 <br/>Dress - Summer Casual - White 12 .50 <br/>Dress - Summer Casual - White 13 .50 <br/>Dress - Summer Casual - White 14 .55 <br/>Dress - Summer Casual - White 15 .55 <br/>Dress - Summer Casual - White 16 .55 <br/>Dress - Summer Casual - White 17 .55 <br/>Dress - Summer Casual - White 18 .60 <br/>Dress - Summer Casual - White 19 .65 <br/>Dress - Summer Casual - White 20 .65 <br/>Dress - Summer Casual - White 21 .70 <br/>Dress - Summer Casual - White 22 .80 <br/>Dress - Summer Casual - White 23 .90 <br/>Dress - Summer Casual - White 24 1.00 <br/>Dress - Summer Casual - White 25 1.03 <br/>Dress - Summer Casual - White 26 1.10 <br/>Dress - Summer Casual - White 27 1.25 <br/>Dress - Summer Casual - White 28 1.30 <br/>Dress - Summer Casual - White 29 1.35 <br/>Dress - Summer Casual - White 30 1.40 <br/>;<br/>run;<br/><br/>/* Data for plot7 (Products - Revenue and Viewed) */<br/>data data7;<br/> format revenue viewed percent5.0;<br/> input product $ 1-40 revenue viewed;<br/> datalines;<br/>Skirt - Business Casual - Black .113 .090<br/>Shirt - Oxford - White .100 .020<br/>Shirt - Oxford - Blue .091 .060<br/>Men's Pants - Chino - Beige .090 .080<br/>Blouse - Business Dress - White .078 .055<br/>Shirt - Fitted Dress - White .075 .018<br/>Men's Pants - Dress Cuffs -Black .072 .050<br/>Women's Pants - Chino - Beige .070 .075<br/>Skirt - Pleated - Beige .060 .140<br/>Dress - Summer Casual - White .055 .020<br/>;<br/>run;<br/><br/>/* Data for plot8 (Top 10 - purchased together, but not displayed together) */<br/>data data8;<br/> input product1 $ 1-40 product2 $ 41-80 value;<br/> datalines;<br/>Shirt - Oxford - White Men's Pants - Chino - Tan .27<br/>Skirt - Pleated - Beige Blouse - Business Dress - White .24<br/>Skirt - Business Casual - Black Blouse - Business Dress - White .22<br/>Men's Pants - Dress - Black Shirt - Fitted Dress - White .17<br/>Men's Pants - Chino - Beige Shirt - Oxford - Blue .14<br/>Men's Pants - Dress w/ Cuffs - Blue Shirt - Fitted Dress - White .13<br/>Women's Pants - Dress - Black Blouse - Business Casual - White .12<br/>Dress - Summer Casual - White Shoes - Sandals - White .11<br/>Women's Pants - Chino - White Blouse - Business Casual - Blue .10<br/>Men's Pants - Outdoors - Brown Shirt - Outdoors - Beige .10<br/>run;<br/><br/>/* Data for plot9 (Referral Sites - sparklines) */<br/>data data9;<br/> input product $ 1-40 timestamp percent_of_target;<br/> datalines;<br/>www.clothingconnection.com 1 .60 <br/>www.clothingconnection.com 2 .80 <br/>www.clothingconnection.com 3 1.10 <br/>www.clothingconnection.com 4 1.10 <br/>www.clothingconnection.com 5 1.00 <br/>www.clothingconnection.com 6 .90 <br/>www.clothingconnection.com 7 1.00 <br/>www.clothingconnection.com 8 1.40 <br/>www.clothingconnection.com 9 1.35 <br/>www.clothingconnection.com 10 1.45 <br/>www.clothingconnection.com 11 1.60 <br/>www.clothingconnection.com 12 1.70 <br/>www.getithere.com 1 1.70 <br/>www.getithere.com 2 1.65 <br/>www.getithere.com 3 1.40 <br/>www.getithere.com 4 1.30 <br/>www.getithere.com 5 1.20 <br/>www.getithere.com 6 1.00 <br/>www.getithere.com 7 1.00 <br/>www.getithere.com 8 1.00 <br/>www.getithere.com 9 .70 <br/>www.getithere.com 10 .70 <br/>www.getithere.com 11 .60 <br/>www.getithere.com 12 .60 <br/>www.ellingswear.com 1 0.90 <br/>www.ellingswear.com 2 0.90 <br/>www.ellingswear.com 3 1.10 <br/>www.ellingswear.com 4 1.10 <br/>www.ellingswear.com 5 1.10 <br/>www.ellingswear.com 6 1.10 <br/>www.ellingswear.com 7 1.10 <br/>www.ellingswear.com 8 1.00 <br/>www.ellingswear.com 9 0.90 <br/>www.ellingswear.com 10 0.90 <br/>www.ellingswear.com 11 1.10 <br/>www.ellingswear.com 12 0.80 <br/>www.trimthebill.com 1 0.60 <br/>www.trimthebill.com 2 0.60 <br/>www.trimthebill.com 3 1.40 <br/>www.trimthebill.com 4 1.30 <br/>www.trimthebill.com 5 1.10 <br/>www.trimthebill.com 6 0.90 <br/>www.trimthebill.com 7 1.30 <br/>www.trimthebill.com 8 1.00 <br/>www.trimthebill.com 9 1.10 <br/>www.trimthebill.com 10 1.10 <br/>www.trimthebill.com 11 1.00 <br/>www.trimthebill.com 12 0.90 <br/>www.looknofurther.com 1 0.80 <br/>www.looknofurther.com 2 0.85 <br/>www.looknofurther.com 3 0.90 <br/>www.looknofurther.com 4 1.00 <br/>www.looknofurther.com 5 1.20 <br/>www.looknofurther.com 6 1.40 <br/>www.looknofurther.com 7 1.60 <br/>www.looknofurther.com 8 1.50 <br/>www.looknofurther.com 9 1.35 <br/>www.looknofurther.com 10 1.10 <br/>www.looknofurther.com 11 0.90 <br/>www.looknofurther.com 12 0.85 <br/>www.cheapstuff.com 1 1.00 <br/>www.cheapstuff.com 2 0.95 <br/>www.cheapstuff.com 3 1.00 <br/>www.cheapstuff.com 4 1.10 <br/>www.cheapstuff.com 5 1.00 <br/>www.cheapstuff.com 6 1.20 <br/>www.cheapstuff.com 7 1.00 <br/>www.cheapstuff.com 8 1.10 <br/>www.cheapstuff.com 9 1.15 <br/>www.cheapstuff.com 10 1.10 <br/>www.cheapstuff.com 11 1.15 <br/>www.cheapstuff.com 12 1.10 <br/>www.bargainbasement.com 1 1.60 <br/>www.bargainbasement.com 2 1.30 <br/>www.bargainbasement.com 3 1.00 <br/>www.bargainbasement.com 4 0.90 <br/>www.bargainbasement.com 5 0.80 <br/>www.bargainbasement.com 6 0.80 <br/>www.bargainbasement.com 7 0.90 <br/>www.bargainbasement.com 8 1.00 <br/>www.bargainbasement.com 9 1.00 <br/>www.bargainbasement.com 10 1.10 <br/>www.bargainbasement.com 11 1.15 <br/>www.bargainbasement.com 12 1.20 <br/>www.dressforsuccess.com 1 1.20 <br/>www.dressforsuccess.com 2 1.30 <br/>www.dressforsuccess.com 3 1.50 <br/>www.dressforsuccess.com 4 1.55 <br/>www.dressforsuccess.com 5 1.50 <br/>www.dressforsuccess.com 6 1.40 <br/>www.dressforsuccess.com 7 0.60 <br/>www.dressforsuccess.com 8 0.65 <br/>www.dressforsuccess.com 9 0.60 <br/>www.dressforsuccess.com 10 0.60 <br/>www.dressforsuccess.com 11 0.60 <br/>www.dressforsuccess.com 12 0.60 <br/>www.relaxwear.com 1 .30 <br/>www.relaxwear.com 2 .20 <br/>www.relaxwear.com 3 .30 <br/>www.relaxwear.com 4 .45 <br/>www.relaxwear.com 5 .50 <br/>www.relaxwear.com 6 .60 <br/>www.relaxwear.com 7 .60 <br/>www.relaxwear.com 8 .70 <br/>www.relaxwear.com 9 .80 <br/>www.relaxwear.com 10 .90 <br/>www.relaxwear.com 11 1.00 <br/>www.relaxwear.com 12 1.10 <br/>www.nobrainer.com 1 .90 <br/>www.nobrainer.com 2 .80 <br/>www.nobrainer.com 3 1.10 <br/>www.nobrainer.com 4 .60 <br/>www.nobrainer.com 5 1.00 <br/>www.nobrainer.com 6 .60 <br/>www.nobrainer.com 7 1.10 <br/>www.nobrainer.com 8 .50 <br/>www.nobrainer.com 9 1.00 <br/>www.nobrainer.com 10 .60 <br/>www.nobrainer.com 11 1.20 <br/>www.nobrainer.com 12 .70 <br/>;<br/>run;<br/><br/>/* Data for plot10 (Referral Sites - table) */<br/>data data10;<br/> input product $ 1-40 referral_count referral_pct since_year_ago average_revenue;<br/> datalines;<br/>www.clothingconnection.com 1103 .19 .57 72 <br/>www.getithere.com 782 .15 -.43 61 <br/>www.ellingswear.com 688 .13 -.02 90 <br/>www.trimthebill.com 413 .08 0 32 <br/>www.looknofurther.com 330 .06 -.03 52 <br/>www.cheapstuff.com 301 .06 .26 19 <br/>www.bargainbasement.com 297 .06 -.06 29 <br/>www.dressforsuccess.com 239 .05 -.25 42 <br/>www.relaxwear.com 174 .03 .13 22 <br/>www.nobrainer.com 168 .03 -.05 10 <br/>;<br/>run;<br/><br/>/* Data for plot11 (Top 10 - displayed together, but rarely purchased together) */<br/>data data11;<br/> input product1 $ 1-40 product2 $ 41-80 value;<br/> datalines;<br/>Men's Pants - Dress - Blue Shirt - Sport Tee - Black .000<br/>Skirt - Pleated - White Women's Sweater - Casual - Brown .001<br/>Dress - Business Casual - Beige Blouse - Business Dress - Black .010<br/>Women's Pants - Dress - Brown Blouse - Business Casual - Black .011<br/>Dress - Summer Casual - White Shoes - Pumps - Blue .012<br/>Men's Pants - Dress w/ Cuffs - Tan Shirt - Fitted Dress - Blue .013<br/>Skirt - Dress - Black Blouse - Business Casual - Black .020<br/>Dress - Formal - Blue Shoes - Pumps - White .021<br/>Shirt - Fitted Dress - Blue Men's Pants - Jeans - Blue .030<br/>Shirt - Sport Tee - Brown Men's Pants - Jeans - Brown .031<br/>run;<br/><br/>/* Note: There is no data for plot12 or plot13. <br/> Those elements are generated with annotated text. */<br/><br/>/***************************************************************************/<br/><br/>goptions device=gif;<br/>goptions cback=&backcolor;<br/>goptions noborder;<br/><br/>/* Delete all GRSEGs in the current session to ensure that indicators use<br/>the expected names. If a name is already in use, then an attempt to create<br/>a new GRSEG using that name it will add a number to the name. In that case, <br/>the subsequent GREPLAY will be placing the wrong GRSEGs into the dashboard.<br/><br/>Note: The macro code just checks whether there are any gsegs to delete. If <br/>it tried to delete specific entries and none existed, then you would get an<br/>error message: "ERROR: Member-name GSEG is unknown." */<br/><br/>%macro delcat(catname);<br/> %if %sysfunc(cexist(&catname)) %then %do;<br/> proc greplay nofs igout=&catname;<br/> delete _all_;<br/> run;<br/> %end;<br/> quit;<br/>%mend delcat;<br/>%delcat(work.gseg);<br/><br/>/**************************************************************************/<br/>/* Create the individual indicators. */<br/><br/>/* Set the NODISPLAY option to save the plots as GRSEGS <br/> without writing them to the output. */<br/>goptions nodisplay;<br/><br/><br/>/* plot1 (MTD Compared to Target) -----------------------------------------*/<br/>/* Set up the 'chart tip' and drill-down using the variable named HTML so that it can<br/> also be used as the chart tip and drill-down for the annotate as well. (The variable<br/> could be named anything for use in the chart, but it must be named HTML to use it <br/> in annotate.) */<br/>data data1; set data1;<br/> length html $400;<br/> html=<br/> 'title='||quote( trim(left(barname))||': '||trim(left(put(value,percentn6.0))) )<br/> ||' '||<br/> 'href="'||"&hardcoded_drilldown"||'"'; <br/>run;<br/><br/>/* Annotating the bullet graph shading behind the bars. */<br/>data plot1_anno; set data1;<br/> length function $8 color $12 style $20;<br/> <br/> /* Annotate the shading 'behind/before' the black bars. */<br/> when='b';<br/> <br/> /* First, draw the left-most shaded area behind the bullet graph. <br/> Draw a bar/box from the beginning/zero of the bar, to the target<br/> value for the bar (the top/right corner of this bar/box will be<br/> 30% up in the y-direction - this is 2*15%). Move to the middle <br/> of the beginning of each bar. */<br/> function='move';<br/> xsys='2'; x=0;<br/> ysys='2'; midpoint=barname;<br/> output;<br/> /* Move in y-direction 15% below bar center, drawing out a box/bar */<br/> ysys='7'; y=-15;<br/> output;<br/> function='bar'; style='solid'; line=0; color="&bullet1"; y=+30; x=target;<br/> output;<br/> <br/> /* Next, draw the right-most shaded area behind the bullet graph. <br/> Move to the middle of the target value of each bar */<br/> function='move';<br/> xsys='2'; x=target;<br/> ysys='2'; midpoint=barname;<br/> output;<br/><br/> /* Move in y-direction 15% below bar center, drawing out a box/bar */<br/> ysys='7'; y=-15;<br/> output;<br/> function='bar'; style='solid'; line=0; color="&bullet2"; y=+30; xsys='1'; x=100;<br/> output;<br/>run;<br/><br/>goptions xpixels=275 ypixels=100; <br/>goptions gunit=pct htitle=15 htext=13 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/><br/>axis1 color=&lighttext label=none value=(justify=right) offset=(16,16) style=0;<br/>axis2 color=&lighttext order=(0 to 2.00 by .50) minor=none label=none offset=(0,0);<br/><br/>title1 j=l c=&lighttext " MTD Compared to Target";<br/><br/>pattern1 v=s color=&black;<br/><br/>/* Draw the horizontal bar chart, and annotate the bullet background shading */<br/>proc gchart data=data1 anno=plot1_anno;<br/> hbar barname / ascending<br/> type=sum sumvar=value<br/> ref=1.00 cref=&black<br/> maxis=axis1<br/> raxis=axis2<br/> space=7<br/> width=3<br/> nostats<br/> noframe<br/> html=html<br/> name="plot1"; <br/>run;<br/><br/>/* plot2 (Percent of Total Visitors Today) */<br/>/* Set up the 'chart tip' and drill-down using the variable named HTML so that it can<br/> also be used as the chart tip and drill-down for the annotate as well. (The variable<br/> could be named anything for use in the chart, but it must be named HTML to use it <br/> in annotate.) */<br/>data data2; set data2;<br/> length html $400;<br/> html='title='||quote( trim(left(barname))||': '||trim(left(put(value,percentn6.0))) )<br/> ||' '|| 'href="'||"&hardcoded_drilldown"||'"'; <br/>run;<br/><br/>/* Annotate the bullet graph shading behind the bars. */<br/>data plot2_anno; set data2;<br/> length function $8 color $12 style $20;<br/><br/> /* Annotate the shading behind the black bars. */<br/> when='b';<br/> <br/> /* First, draw the left-most shaded area behind the bullet graph. <br/> Draw a bar/box from the beginning/zero of the bar, to the target<br/> value for the bar (the top/right corner of this bar/box will be<br/> 30% up in the y-direction - this is 2*15%). */<br/> function='move';<br/> xsys='2'; x=0;<br/> ysys='2'; midpoint=barname;<br/> output;<br/><br/> /* Move in y-direction 15% below bar center */<br/> ysys='7'; y=-15;<br/> output;<br/> function='bar'; style='solid'; line=0; color="&bullet1"; y=+30; x=target;<br/> output;<br/> <br/> /* Similarly, draw the 2nd 1/3 of the bullet shading from the target<br/> value to the extreme 100% right side of the graph. */<br/> function='move';<br/> xsys='2'; x=target;<br/> ysys='2'; midpoint=barname;<br/> output;<br/> ysys='7'; y=-15;<br/> output;<br/> function='bar'; style='solid'; line=0; color="&bullet2"; y=+30; x=target2;<br/> output;<br/> <br/> /* Similarly, draw the last 1/3 of the bullet shading from the target<br/> value to the extreme 100% right side of the graph. */<br/> function='move';<br/> xsys='2'; x=target2;<br/> ysys='2'; midpoint=barname;<br/> output;<br/> ysys='7'; y=-15;<br/> output;<br/> function='bar'; style='solid'; line=0; color="&bullet3"; y=+30; xsys='1'; x=100;<br/> output;<br/>run;<br/><br/>goptions xpixels=275 ypixels=100; <br/>goptions gunit=pct htitle=15 htext=13 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/><br/>axis1 color=&lighttext label=none value=(justify=right) offset=(16,16) style=0;<br/>axis2 color=&lighttext order=(0 to 1.00 by .25) minor=none label=none offset=(0,0);<br/><br/>title1 j=l c=&lighttext " Percent of Total Visitors Today";<br/><br/>pattern1 v=s color=&black;<br/><br/>proc gchart data=data2 anno=plot2_anno;<br/> hbar barname / ascending<br/> type=sum sumvar=value<br/> maxis=axis1<br/> raxis=axis2<br/> space=7<br/> width=3<br/> nostats<br/> noframe<br/> html=html<br/> name='plot2'; <br/>run;<br/><br/>/* plot3 (Visitors - Last 12 months) */<br/>/* This sample uses numeric month to get the desired order, but a <br/> user-defined format is provided to get them to print as a two-character <br/> month abbreviation. (In this plot, there is not room for a longer <br/> month abbreviation.) */<br/>proc format;<br/> value month_fmt<br/> 1='Ja'<br/> 2='Fe'<br/> 3='Ma'<br/> 4='Ap'<br/> 5='My'<br/> 6='Jn'<br/> 7='Jl'<br/> 8='Au'<br/> 9='Se'<br/> 10='Oc'<br/> 11='No'<br/> 12='De'<br/> ;<br/>run;<br/><br/>/* Use the whole month name in the HTML chart tip, because there's room there. */<br/>proc format;<br/> value month_name<br/> 1='January'<br/> 2='February'<br/> 3='March'<br/> 4='April'<br/> 5='May'<br/> 6='June'<br/> 7='July'<br/> 8='August'<br/> 9='September'<br/> 10='October'<br/> 11='November'<br/> 12='December'<br/> ;<br/>run;<br/><br/>/* Becayse the GPLOT procedure in SAS/GRAPH software doesn't do <br/> grouped plots, results cannot be grouped by year without annotation. <br/> The year and month into are combined into a single variable, which is <br/> then used to annotate the axis tick mark labels. Also, by annotating <br/> the tick mark labels, chart tips can be added to them, which would not <br/> have been possible with regular tick mark values. */<br/>data data3; set data3;<br/> year_mon=trim(left(year))||'_'||trim(left(put(month,z2.)));<br/>run;<br/><br/>data data3; set data3;<br/> length html $400;<br/> html= 'title='||quote( trim(left(put(month,month_name.)))||', '||trim(left(year))||<br/> ' value='||trim(left(put(visitor_deviation,percentn6.0))) )<br/> ||' '|| 'href="'||"&hardcoded_drilldown"||'"'; <br/>run;<br/><br/>/* Annotate gray area from bottom of graph to the zero line. */<br/>data plot3_anno1;<br/> length function $8 style $20;<br/> when='b';<br/> xsys='1'; ysys='1'; <br/> x=0; y=0;<br/> function='move';<br/> output;<br/> xsys='1'; ysys='2'; <br/> x=100; y=0;<br/> function='bar'; style='solid'; color="grayf5";<br/> output;<br/>run;<br/><br/>/* Annotate the month and year labels along the axis. */<br/>data plot3_anno2;<br/> length function $8 style $20;<br/> length text $20;<br/> set data3; by year;<br/> when='a';<br/> color="&lighttext";<br/> position='5';<br/> xsys='2'; ysys='3';<br/> xc=year_mon; y=15;<br/> text=put(month,month_fmt.);<br/> output;<br/>/* For the first/lowest month of each year, put an extra label along <br/> the axis to show the year. Suppress the chart tip on the label. */<br/> if first.year then do;<br/> html='';<br/> text=' '||trim(left(year));<br/> y=8;<br/> output;<br/> end;<br/>run;<br/><br/>goptions xpixels=300 ypixels=200; <br/>goptions gunit=pct htitle=9 htext=5 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/><br/>axis1 color=&lighttext order=(-.1 to .4 by .1) minor=none label=none offset=(0,0);<br/>axis2 color=&lighttext minor=none major=none value=none label=none offset=(2,2) style=0;<br/><br/>symbol v=dot h=3 i=join c=&black w=.1;<br/><br/>title1 j=l c=&majorcolor "Visitors";<br/>title2 j=l "Last 12 months' average daily visitors deviation";<br/>title3 j=l "relative to same month in the prior year";<br/>title4 a=-90 h=11 " ";<br/><br/>footnote1 h=10 " ";<br/><br/>proc gplot data=data3 anno=plot3_anno2;<br/> plot visitor_deviation*year_mon /<br/> vaxis=axis1<br/> haxis=axis2<br/> vref=0<br/> noframe<br/> anno=plot3_anno1<br/> html=html<br/> name='plot3'; <br/>run;<br/><br/>/* plot4 (Visitors - This month) */<br/><br/>/* Add a chart tip and drill-down to each plot marker. This serves double-duty <br/> and becomes the chart tip and drill-down for the annotated axis tick mark <br/> labels below each plot marker. Because this chart tip/drill-down is used <br/> in annotate, the variable must be named HTML. */<br/>data data4; set data4;<br/> length html $400;<br/> html=<br/> 'title='||quote( trim(left(days))||' days into month: value='||trim(left(put(visitor_deviation,percentn6.0))) )<br/> ||' '|| 'href="'||"&hardcoded_drilldown"||'"'; <br/>run;<br/><br/>/* Annotate gray area from bottom of graph, to the zero line. */<br/>data plot4_anno1;<br/> length function $8 style $20;<br/> when='b';<br/> xsys='1'; ysys='1'; <br/> x=0; y=0;<br/> function='move';<br/> output;<br/> xsys='1'; ysys='2'; <br/> x=100; y=0;<br/> function='bar'; style='solid'; color="grayf5";<br/> output;<br/> /* Annotate a custom footnote. */<br/> when='a'; style="&ftext"; color="&lighttext"; hsys='3'; size=5;<br/> function='label'; xsys='1'; x=50; ysys='3'; y=8; position='5'; text='Days so far this month';<br/> output;<br/>run;<br/><br/>/* Annotate the days labels along the axis. */<br/>data plot4_anno2;<br/> length function $8 style $20;<br/> length text $20;<br/> set data4; <br/> when='a';<br/> color="&lighttext";<br/> position='5';<br/> xsys='2'; ysys='3';<br/> x=days; y=15;<br/> text=trim(left(days));<br/> output;<br/>run;<br/><br/>goptions xpixels=300 ypixels=200; <br/>goptions gunit=pct htitle=9 htext=5 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/><br/>axis1 color=&lighttext order=(-.4 to .2 by .1) minor=none label=none offset=(0,0) <br/> value=(t=5 '0%');<br/>axis2 color=&lighttext minor=none major=none value=none label=none offset=(2,2) style=0;<br/><br/>symbol v=dot h=3 i=join c=&black w=.1;<br/><br/>title1 j=l c=&majorcolor " ";<br/>title2 j=l "This month's daily visitors deviation relative to";<br/>title3 j=l "13-week running average for the same weekday";<br/>title4 a=-90 h=11 " ";<br/><br/>footnote1 h=10 " ";<br/><br/>proc gplot data=data4 anno=plot4_anno2;<br/> plot visitor_deviation*days /<br/> vaxis=axis1<br/> haxis=axis2<br/> vref=0<br/> noframe<br/> anno=plot4_anno1<br/> html=html<br/> name='plot4'; <br/>run;<br/><br/><br/>/* plot5 (Visitors - Today)*/<br/><br/>/* Add a chart tip and drill-down to each plot marker. This serves double-duty <br/> and becomes the chart tip and drill-down for the annotated axis tick mark <br/> labels below each plot marker. Because this chart tip/drill-down is used <br/> in annotate, the variable must be named HTML. */<br/>data data5; set data5; <br/> length html $400;<br/> html=<br/> 'title='||quote( trim(left(hours))||' hours into today: value='||trim(left(put(visitor_deviation,percentn6.0))) )<br/> ||' '|| 'href="'||"&hardcoded_drilldown"||'"'; <br/>run;<br/><br/>/* Annotate gray area from bottom of graph, to the zero line. */<br/>data plot5_anno1;<br/> length function $8 style $20;<br/> when='b';<br/> xsys='1'; ysys='1'; <br/> x=0; y=0;<br/> function='move';<br/> output;<br/> xsys='1'; ysys='2'; <br/> x=100; y=0;<br/> function='bar'; style='solid'; color="grayf5";<br/> output;<br/> /* Annotate a custom footnote. */<br/> when='a'; style="&ftext"; color="&lighttext";<br/> function='label'; xsys='1'; x=50; ysys='3'; y=8; position='5'; text='Hours so far today';<br/> output;<br/>run;<br/><br/>/* Annotate the hours labels along the axis */<br/>data plot5_anno2;<br/> length function $8 style $20;<br/> length text $20;<br/> set data5; <br/> when='a';<br/> color="&lighttext";<br/> position='5';<br/> xsys='2'; ysys='3';<br/> x=hours; y=15;<br/> text=trim(left(hours));<br/> output;<br/>run;<br/><br/>goptions xpixels=300 ypixels=200; <br/>goptions gunit=pct htitle=9 htext=5 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/><br/>axis1 color=&lighttext order=(-.4 to .2 by .1) minor=none label=none offset=(0,0) <br/> value=(t=5 '0%');<br/>axis2 color=&lighttext minor=none major=none value=none label=none offset=(2,2) style=0;<br/><br/>symbol v=dot h=3 i=join c=&black w=.1;<br/><br/>title1 j=l c=&majorcolor " ";<br/>title2 j=l "Today's hourly visitors deviation relative to";<br/>title3 j=l "13-week running average for the same hour";<br/>title4 a=-90 h=11 " ";<br/><br/>footnote1 h=10 " ";<br/><br/>proc gplot data=data5 anno=plot5_anno2;<br/> plot visitor_deviation*hours /<br/> vaxis=axis1<br/> haxis=axis2<br/> vref=0<br/> noframe<br/> anno=plot5_anno1<br/> html=html<br/> name='plot5'; <br/>run;<br/><br/>/* plot7 (Products - Revenue and Viewed) */<br/><br/>/* plot7 is created before plot6, because the transformed data7 <br/> is used to create plot6. */<br/><br/>data data7; set data7;<br/> length myhtml $400;<br/> myhtml= 'title='||quote( trim(left(product))||'0D'x<br/> ||'Revenue='||trim(left(put(revenue,percentn6.0)))||'0D'x<br/> ||'Viewed='||trim(left(put(viewed,percentn6.0))) )<br/> ||' '|| 'href="'||"&hardcoded_drilldown"||'"'; <br/>run;<br/><br/>proc sort data=data7 out=data7;<br/> by descending revenue product;<br/>run;<br/><br/>data data7; set data7;<br/> sortorder=_n_;<br/>run;<br/><br/>data plot7_anno;<br/> set data7;<br/> when='a';<br/> /* Move to the appropriate x-position in the middle of the bar. */<br/> function='move';<br/> xsys='2'; x=viewed;<br/> ysys='2'; midpoint=product;<br/> output;<br/> /* Move in y-direction 5% below bar center. */<br/> ysys='7'; y=-3;<br/> output;<br/> /* Draw a line in y-direction 5% above bar center. */<br/> function='draw'; line=1; size=6.0; color="&black"; y=+6;<br/> output;<br/>run;<br/><br/>/* Note: Care is required to get the bar chart in the same order as the <br/> sparklines. The bar chart is in descending order, with the bars sorted <br/> from highest-to-lowest by bar length (and, if there's a tie, it goes <br/> alphabetical). The bar chart does this automatically, but the data is<br/> also manually sorted to get the order to merge with the sparkline data <br/> to achieve the same order. If you don't do this carefully, you can get <br/> sparklines lining up with the wrong bars. */<br/>goptions xpixels=565 ypixels=300; <br/>goptions gunit=pct ftitle=&ftext ftext=&ftext htitle=9 htext=4.9 ctext=&black;<br/><br/>title1 j=l h=15 " ";<br/><br/>footnote h=3 " ";<br/><br/>axis1 color=&lighttext label=none value=(color=&black);<br/>axis2 color=&lighttext order=(0 to .16 by .04) minor=none label=none;<br/><br/>pattern1 v=s c=&revenue_color;<br/><br/>proc gchart data=data7 anno=plot7_anno;<br/> hbar product / descending<br/> type=sum<br/> sumvar=revenue<br/> sumlabel=none /* doesn't work? had to use label=none in axis stmt */<br/> nostats<br/> maxis=axis1<br/> raxis=axis2<br/> space=1.5<br/> noframe<br/> html=myhtml<br/> des=""<br/> name="plot7";<br/>run;<br/><br/>/* plot6 (Products - Sparklines) */<br/>/* These are the sparklines to the left of the bar chart. "Sparkline" <br/> graphs are challenging to create with SAS/GRAPH software. This example<br/> uses the GPLOT procedure, and for each line an offset is<br/> added so that the lines are plotted aboveor below each other, rather <br/> than on top of each other. */<br/><br/>/* y-axis is done with 'vreverse', so the lowest number is at the top.<br/>1 = Skirt - Business Casual - Black<br/>...<br/>10 = Dress - Summer Casual - White <br/>*/<br/><br/>/* Merge in the order from the bar chart data7. It is important to get the same <br/> order, so that the sparklines will line up with the bars. */<br/>proc sql noprint;<br/> create table data6 as<br/> select data6.*, data7.sortorder<br/> from data6 left join data7<br/> on data6.product = data7.product<br/> order by product, timestamp;<br/>quit; <br/><br/>/* This plot uses vreverse, so this equation is the<br/> reverse of how you might perceive it at first glance. */<br/>data data6; set data6;<br/> y=(2*(sortorder))+(1.00 - percent_of_target);<br/>run;<br/><br/>/* Annotate invisible drill-down covering entire graph area (because<br/>you can't do drill-downs on plot lines without markers. */<br/>data plot6_anno;<br/> length function $8 color style $20;<br/> xsys='1'; ysys='1'; <br/> x=0; y=0; function='move';<br/> output;<br/> html='title="drilldown"' ||' '|| <br/> 'href="'||"&hardcoded_drilldown"||'"'; <br/> x=100; y=100; function='bar'; style='empty'; when='b'; color="&backcolor";<br/> output;<br/>run;<br/><br/><br/>goptions xpixels=200 ypixels=300; <br/>goptions gunit=pct ftitle=&ftext ftext=&ftext htitle=9 htext=6.3;<br/><br/>axis1 label=none order=(0 to 22 by 2) value=none major=none minor=none style=0;<br/>axis2 label=(' ') order=(1 to 30 by 2) value=none major=none minor=none style=0;<br/><br/>symbol v=none i=join width=.1 c=&black repeat=100;<br/><br/>title1 j=l c=&majorcolor "Products";<br/>title2 h=2.0 " ";<br/>title3 a=90 h=4 " ";<br/>title4 a=-90 h=4 " ";<br/><br/>footnote;<br/><br/>proc gplot data=data6 anno=plot6_anno;<br/> plot y*timestamp=product / <br/> noframe<br/> vaxis=axis1 vreverse<br/> haxis=axis2<br/> vref= 2 4 6 8 10 12 14 16 18 20<br/> cvref=&lighttext<br/> nolegend<br/> des=""<br/> name="plot6";<br/>run;<br/><br/>/* plot8 (Top 10 - purchased together, but not displayed together) */<br/><br/>/* Note: This "Top 10" table is complex. Because this sample uses the <br/> GREPLAY procedure to place the indicator in the dashboard, typical<br/> reporting procedures like PRINT or TABLATE cannot be used because <br/> they produce text output. This sample uses the Annotate facility in <br/> SAS/GRAPH software to create a graphical slide with the table text <br/> in the desired positions. Using this approach, the spacing of the <br/> table items must be adjusted manually. If you change the number of<br/> items in the table, you must change the offsets or increments for the<br/> annotated positions of the text). */<br/><br/>proc sort data=data8 out=data8;<br/> by descending value;<br/>run;<br/><br/>data data8; set data8;<br/> n=_n_;<br/>run;<br/><br/>proc sql noprint;<br/> select unique count(*) format=comma2.0 into :count7 from data8;<br/>quit;<br/>run;<br/><br/>%let min_y=1;<br/>%let max_y=76;<br/><br/>data plot8_anno;<br/> set data8;<br/> length style $20 color $ 12 function $ 8 text $ 100;<br/> xsys='3'; ysys='3'; hsys='3'; style="&ftext"; color="&black";<br/> y=&max_y-(n-1)*((&max_y-&min_y)/&count7);<br/> x=10; position='4'; text=trim(left(put(value,percentn6.0)));<br/> output;<br/> x=14; position='6'; text=trim(left(product1));<br/> output;<br/> x=58; position='6'; text=trim(left(product2));<br/> output;<br/>run;<br/><br/>data plot8_annob; <br/> length style $20 color $ 12 function $ 8 text $ 100;<br/> xsys='3'; ysys='3'; hsys='3'; style="&ftext"; color="&lighttext";<br/> function='move'; x=5; y=&max_y+5;<br/> output;<br/> function='draw'; x=100; size=.1;<br/> output;<br/> function='label'; size=.; <br/> y=&max_y+10;<br/> color="&black";<br/> x=10; position='4'; text='%';<br/> output;<br/> x=14; position='6'; text='Product 1';<br/> output;<br/> x=58; position='6'; text='Product 2';<br/> output;<br/> y=&max_y+18; style="&ftext"; size=5.5; color="&lighttext";<br/> /* foofoo */<br/> x=5; position='6'; text="Top &count7 products purchased together but not displayed together";<br/> output;<br/>run;<br/><br/>/* Annotate an invisible bar/box with drill-down link for the entire table. */<br/>data plot8_annoc;<br/> length function $8 color style $20;<br/> xsys='3'; ysys='3'; <br/> x=0; y=0; function='move';<br/> output;<br/> html='title="drilldown"' ||' '|| <br/> 'href="'||"&hardcoded_drilldown"||'"'; <br/> x=100; y=100; function='bar'; style='empty'; when='b'; color="&backcolor";<br/> output;<br/>run;<br/><br/>data plot8_anno;<br/> set plot8_anno plot8_annob plot8_annoc;<br/>run;<br/><br/>goptions gunit=pct htitle=10 htext=4.5 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/>title; <br/>footnote;<br/>goptions xpixels=1400 ypixels=700; <br/>proc gslide des="" name="plot8" anno=plot8_anno;<br/>run;<br/><br/>/* plot10 (Referral Sites - table) */<br/><br/>proc sort data=data10 out=data10;<br/> by descending referral_count product;<br/>run;<br/><br/>data data10; set data10;<br/> sortorder=_n_;<br/>run;<br/><br/>data plot10_anno; set data10;<br/> length text $100 html $200;<br/> function='label'; when='a'; position='4';<br/> ysys='2'; midpoint=product;<br/> xsys='1'; <br/> x=16; text=trim(left(put(referral_count,comma8.0)));<br/> output;<br/> x=42; text=trim(left(put(referral_pct,percentn7.0)));<br/> output;<br/> x=70; text=trim(left(put(since_year_ago,percentn7.0))); <br/> if since_year_ago > 0 then text='+'||trim(left(text));<br/> output;<br/> x=95; text=trim(left(average_revenue));<br/> output;<br/> /* Annotate an invisible label behind the bar labels for drill-down. */<br/> xsys="3"; when="b"; style="swiss"; position="6"; color="&backcolor";<br/> html='title="'||trim(left(product))||'"'||' '||<br/> 'href="http://'||trim(left(product))||'"';<br/> x=1; text="XXXXXXXXXXXXXXXXXX";<br/> output;<br/>run;<br/><br/>/* Annotate an invisible drill-down covering entire graph area, just inside<br/> the axis area (where the annotated table is). Note that the Web site<br/> names, which are outside the axis, have their own separate drill-downs to the <br/> corresponding Web site. */<br/>data plot10_anno2;<br/> length function $8 color style $20;<br/> xsys='1'; ysys='1'; <br/> x=0; y=0; function='move';<br/> output;<br/> html='title="drilldown"' ||' '|| <br/> 'href="'||"&hardcoded_drilldown"||'"'; <br/> x=100; y=100; function='bar'; style='empty'; when='b'; color="&backcolor";<br/> output;<br/>run;<br/><br/>/* Note: Care is required to get the bar chart in the same order as the <br/> sparklines. The bar chart is in descending order, with the bars sorted <br/> from highest-to-lowest by bar length (and, if there's a tie, it goes <br/> alphabetical). The bar chart does this automatically, but the data is<br/> also manually sorted to get the order to merge with the sparkline data <br/> to achieve the same order. If you don't do this carefully, you can get <br/> sparklines lining up with the wrong bars. */<br/>goptions xpixels=565 ypixels=325; <br/>goptions gunit=pct ftitle=&ftext ftext=&ftext htitle=10 htext=4.9 ctext=&black;<br/><br/>title1 j=l h=15 " ";<br/><br/>footnote h=3 " ";<br/><br/>axis1 color=&lighttext label=none value=(color=&black) style=0;<br/>axis2 color=&lighttext order=(0 to 2000 by 1000) major=none minor=none value=none label=none style=0;<br/><br/>/* Make the bars same color as background so they are invisible. */<br/>pattern1 v=s c=&backcolor;<br/><br/>proc gchart data=data10 anno=plot10_anno;<br/> hbar product / descending<br/> type=sum<br/> sumvar=referral_count<br/> sumlabel=none<br/> nostats<br/> maxis=axis1<br/> raxis=axis2<br/> space=1.5<br/> noframe<br/> anno=plot10_anno2<br/> des=""<br/> name="plot10";<br/>run;<br/><br/>/* plot9 (Referral Sites - sparklines) */<br/><br/>/* These are the sparklines to the left of the website names. <br/> "Sparkline" graphs are challenging to create with SAS/GRAPH software.<br/> This example uses the GPLOT procedure, and for each line an offset is<br/> added so that the lines are plotted aboveor below each other, rather <br/> than on top of each other. */<br/><br/>/* The y-axis is done with 'vreverse', so the lowest number is at the top.<br/>1 = www.clothingconnection.com<br/>...<br/>10 = www.nobrainer.com<br/>*/<br/><br/>/* Merge in the order from the bar chart data. It is important to get the <br/> same order, so the sparklines will line up with the bars. */<br/>proc sql noprint;<br/> create table data9 as<br/> select data9.*, data10.sortorder<br/> from data9 left join data10<br/> on data9.product = data10.product<br/> order by product, timestamp;<br/>quit;<br/>run;<br/><br/>/* Remember, the plot uses vreverse, so this equation is the<br/> reverse of how you might perceive it at first glance. */<br/>data data9; set data9;<br/> y=(2*(sortorder))+(1.00 - percent_of_target);<br/>run;<br/><br/>/* Annotate invisible drill-down covering entire graph area (because<br/> you can't do drill-downs on plot lines without markers). */<br/>data plot9_anno;<br/> length function $8 color style $20;<br/> xsys='1'; ysys='1'; <br/> x=0; y=0; function='move';<br/> output;<br/> html='title="drilldown"' ||' '|| <br/> 'href="'||"&hardcoded_drilldown"||'"'; <br/> x=100; y=100; function='bar'; style='empty'; when='b'; color="&backcolor";<br/> output;<br/>run;<br/><br/>goptions xpixels=200 ypixels=300; <br/>goptions gunit=pct ftitle=&ftext ftext=&ftext htitle=9 htext=6.3;<br/><br/>axis1 label=none order=(0 to 22 by 2) value=none major=none minor=none style=0;<br/>axis2 label=none order=(1 to 12 by 2) value=none major=none minor=none style=0;<br/><br/>symbol v=none i=join width=.1 c=&black repeat=100;<br/><br/>title1 j=l c=&majorcolor "Referral Sites";<br/>title2 h=2 " ";<br/>title3 a=90 h=4 " ";<br/>title4 a=-90 h=4 " ";<br/><br/>footnote;<br/><br/>proc gplot data=data9 anno=plot9_anno;<br/> plot y*timestamp=product / <br/> noframe<br/> vaxis=axis1 vreverse<br/> haxis=axis2<br/> vref= 2 4 6 8 10 12 14 16 18 20<br/> cvref=&lighttext<br/> nolegend<br/> des=""<br/> name="plot9";<br/>run;<br/><br/>/* plot11 (Top 10 table - displayed together, but rarely purchased) */<br/>/* Note: This "Top 10" table is complex. Because this sample uses the <br/> GREPLAY procedure to place the indicator in the dashboard, typical<br/> reporting procedures like PRINT or TABLATE cannot be used because <br/> they produce text output. This sample uses the Annotate facility in <br/> SAS/GRAPH software to create a graphical slide with the table text <br/> in the desired positions. Using this approach, the spacing of the <br/> table items must be adjusted manually. If you change the number of<br/> items in the table, you must change the offsets or increments for the<br/> annotated positions of the text). */<br/>proc sort data=data11 out=data11;<br/> by /* ascending */ value;<br/>run;<br/><br/>data data11; set data11;<br/> n=_n_;<br/>run;<br/><br/>proc sql noprint;<br/> select unique count(*) format=comma2.0 into :count7 from data11;<br/>quit;<br/>run;<br/><br/>data plot11_anno; set data11;<br/> length style $20 color $ 12 function $ 8 text $ 100;<br/> xsys='3'; ysys='3'; hsys='3'; style="&ftext"; color="&black";<br/> y=&max_y-(n-1)*((&max_y-&min_y)/&count7);<br/> x=10; position='4'; text=trim(left(put(value,percentn6.0)));<br/> output;<br/> x=14; position='6'; text=trim(left(product1));<br/> output;<br/> x=58; position='6'; text=trim(left(product2));<br/> output;<br/>run;<br/><br/>data plot11_annob; <br/> length style $20 color $ 12 function $ 8 text $ 100;<br/> xsys='3'; ysys='3'; hsys='3'; style="&ftext"; color="&lighttext";<br/> function='move'; x=5; y=&max_y+5;<br/> output;<br/> function='draw'; x=100; size=.1;<br/> output;<br/> function='label'; size=.; <br/> y=&max_y+10;<br/> color="&black";<br/> x=10; position='4'; text='%';<br/> output;<br/> x=14; position='6'; text='Product 1';<br/> output;<br/> x=58; position='6'; text='Product 2';<br/> output;<br/> y=&max_y+18; style="&ftext"; size=5.5; color="&lighttext";<br/> x=5; position='6'; text="Top &count7 products displayed together but rarely purchased together";<br/> output;<br/>run;<br/><br/>/* Annotate an invisible bar/box, which has an html drilldown for the entire table. */<br/>data plot11_annoc;<br/> length function $8 color style $20;<br/> xsys='3'; ysys='3'; <br/> x=0; y=0; function='move';<br/> output;<br/> html='title="drilldown"' ||' '|| <br/> 'href="'||"&hardcoded_drilldown"||'"'; <br/> x=100; y=100; function='bar'; style='empty'; when='b'; color="&backcolor";<br/> output;<br/>run;<br/><br/>data plot11_anno; set plot11_anno plot11_annob plot11_annoc;<br/>run;<br/><br/>goptions gunit=pct htitle=10 htext=4.5 ftitle=&ftext ftext=&ftext ctext=&lighttext;<br/><br/>title; <br/>footnote;<br/>goptions xpixels=1400 ypixels=700; <br/>proc gslide des="" name="plot11" anno=plot11_anno;<br/>run;<br/><br/>/* plot12 (Products - overall title) */<br/>data plot12_anno;<br/> length function $8 color style $20 text $100;<br/> length html $ 250;<br/> xsys='3'; ysys='3'; hsys='3'; when='a';<br/> <br/> function='label'; position='6';<br/> color="&black";<br/> y=86;<br/> x=2; text="Last 30 Days";<br/> output; <br/> x=27.5; text="Top 10 this Month by Revenue";<br/> output; <br/> x=60; text="Revenue %";<br/> output; <br/> x=80; text="Viewed %";<br/> output; <br/> <br/> x=72.5; style="marker"; text="U"; color="&revenue_color";<br/> output; <br/> x=91; y=y+1.8; style="swissb"; text="I"; size=7; color="&black";<br/> output; <br/> <br/> line=1; size=.2; color="&lighttext";<br/> function='move'; x=2; y=80;<br/> output;<br/> function='draw'; x=98;<br/> output;<br/>run;<br/><br/>goptions xpixels=765 ypixels=300; <br/>goptions gunit=pct ftext=&ftext htext=5.25;<br/><br/>title; <br/>footnote;<br/>proc gslide des="" name="plot12" anno=plot12_anno;<br/>run;<br/><br/>/* plot13 (Referral Sites - overall title) */<br/><br/>data plot13_anno;<br/> length function $8 color style $20 text $100;<br/> length html $ 250;<br/> xsys='3'; ysys='3'; hsys='3'; when='a';<br/> <br/> function='label'; position='6';<br/> color="&black";<br/> y=84;<br/> x=2; text="Last 12 Months";<br/> output; <br/> x=27.5; text="Top 10 Referrers this Month";<br/> output; <br/> <br/> position='4';<br/> x=63; text="Count";<br/> output; <br/> x=75; text="of Total";<br/> output; <br/> x=85.5; text="Yr Ago";<br/> output; <br/> x=98.5; text="Revenue $";<br/> output; <br/> <br/> y=y+6;<br/> x=63; text="Referral";<br/> output; <br/> x=75; text="Referral %";<br/> output; <br/> x=85.5; text="Since";<br/> output; <br/> x=98.5; text="Average";<br/> output; <br/> <br/> line=1; size=.2; color="&lighttext";<br/> function='move'; x=2; y=77;<br/> output;<br/> function='draw'; x=98;<br/> output;<br/>run;<br/><br/>goptions xpixels=765 ypixels=300; <br/>goptions gunit=pct ftext=&ftext htext=5.5;<br/><br/>title; <br/>footnote;<br/>proc gslide des="" name="plot13" anno=plot13_anno;<br/>run;<br/><br/>/* Create the main title slide for dashboard */<br/>data titlanno;<br/> length function $8 color style $20 text $100;<br/> length html $ 250;<br/> xsys='3'; ysys='3'; hsys='3'; when='a';<br/> <br/> /* Annotate the main title at the top center of the dashboard. */<br/> function='label'; position='5';<br/> x=50; y=99.5; size=3.5; style="&ftext"; color="&majorcolor"; text='Web Marketing Dashboard';<br/> output;<br/> y=95.8; size=1.8; style="&ftext"; color="&lighttext"; text="Data as of 2:00 PM (PST), April 13, 2005";<br/> output;<br/> <br/> /* Annotate the light green lines that group and separate the various parts of the dashboard. */<br/> line=1; size=.2; color="&majorcolor";<br/> function='move'; x=0; y=90;<br/> output;<br/> function='draw'; x=100;<br/> output;<br/> function='move'; x=0; y=60;<br/> output;<br/> function='draw'; x=100;<br/> output;<br/> function='move'; x=0; y=30;<br/> output;<br/> function='draw'; x=55;<br/> output;<br/> function='draw'; y=0;<br/> output;<br/> <br/> /* Annotate a Help button that links to a page with information about<br/> the dashboard. */<br/> html='title='||quote('Help')||' '||<br/> 'href="'||"&hardcoded_drilldown"||'"';<br/> <br/> function='move'; x=48; y=91;<br/> output;<br/> function='bar'; line=0; size=.1; style='empty'; color="&lighttext"; x=x+5; y=y+2.5;<br/> output;<br/> html='';<br/> function='label'; color="&lighttext"; style="&ftext"; size=1.8; x=48+2.5; y=91+1.75; position='5'; text='Help';<br/> output;<br/> html='';<br/>run;<br/><br/>goptions xpixels=875 ypixels=685; <br/><br/>title; <br/>footnote;<br/>proc gslide des="" name="titles" anno=titlanno;<br/>run;<br/><br/>/***************************************************************************/<br/>/* Replay the individual indicators to create the dashboard. */<br/><br/>GOPTIONS DEVICE=gif;<br/>goptions xpixels=900 ypixels=700; <br/>goptions display;<br/>goptions border;<br/><br/>ODS LISTING CLOSE;<br/>ODS HTML path=odsout body="&name..htm" (title="Web Marketing Dashboard") <br/> style=minimal gtitle gfootnote;<br/><br/>/* Create custom greplay template, with 13 areas for the plots (areas #1-#13),<br/> and one area for the title slide (area #0).<br/>*/<br/>proc greplay tc=tempcat nofs igout=work.gseg;<br/> tdef murder des='Murder'<br/><br/> 0/llx = 0 lly = 0<br/> ulx = 0 uly =100<br/> urx =100 ury =100<br/> lrx =100 lry = 0<br/><br/> 1/llx = 0 lly =90 <br/> ulx = 0 uly =100<br/> urx = 25 ury =100<br/> lrx = 25 lry =90 <br/><br/> 2/llx = 75 lly =90 <br/> ulx = 75 uly =100<br/> urx = 100 ury =100<br/> lrx = 100 lry =90 <br/><br/> 3/llx = 0 lly =60 <br/> ulx = 0 uly =90 <br/> urx = 33 ury =90 <br/> lrx = 33 lry =60 <br/><br/> 4/llx = 33 lly =60 <br/> ulx = 33 uly =90 <br/> urx = 67 ury =90 <br/> lrx = 67 lry =60 <br/><br/> 5/llx = 67 lly =60 <br/> ulx = 67 uly =90 <br/> urx = 100 ury =90 <br/> lrx = 100 lry =60 <br/><br/> 6/llx = 0 lly =30 <br/> ulx = 0 uly =60 <br/> urx = 15 ury =60 <br/> lrx = 15 lry =30 <br/><br/> 7/llx = 15 lly =30 <br/> ulx = 15 uly =60 <br/> urx = 55 ury =60 <br/> lrx = 55 lry =30 <br/><br/> 8/llx = 55 lly =30<br/> ulx = 55 uly =60<br/> urx = 100 ury =60<br/> lrx = 100 lry =30<br/><br/> 9/llx = 0 lly =0 <br/> ulx = 0 uly =30 <br/> urx = 15 ury =30 <br/> lrx = 15 lry =0 <br/><br/> 10/llx = 15 lly =0 <br/> ulx = 15 uly =30 <br/> urx = 55 ury =30 <br/> lrx = 55 lry =0 <br/><br/> 11/llx = 55 lly =0<br/> ulx = 55 uly =30<br/> urx = 100 ury =30<br/> lrx = 100 lry =0<br/><br/>/* area 12 encompases areas 6 and 7 */<br/><br/> 12/llx = 0 lly =30 <br/> ulx = 0 uly =60 <br/> urx = 55 ury =60 <br/> lrx = 55 lry =30 <br/><br/>/* area 13 encompases areas 9 and 10 */<br/><br/> 13/llx = 0 lly =0 <br/> ulx = 0 uly =30 <br/> urx = 55 ury =30 <br/> lrx = 55 lry =0 <br/>;<br/><br/> /* Replay the individual indicators and the title slide into the custom template. */<br/> template = murder;<br/> treplay<br/> 0:titles<br/> 1:plot1 2:plot2<br/> 3:plot3 4:plot4 5:plot5<br/> 6:plot6 7:plot7 8:plot8<br/> 12:plot12<br/> 9:plot9 10:plot10 11:plot11<br/> 13:plot13<br/> des=""<br/> name="&name";<br/>run;<br/>quit;<br/><br/>ODS HTML CLOSE;<br/>ODS LISTING;</p>
[此贴子已经被作者于2008-3-12 14:36:34编辑过]