<?xml version="1.0"?>
<rss version="2.0">
<channel>
	<title>SAS Community Planet</title>
	<link>http://www.sascommunity.org/planet/</link>
	<language>en</language>
	<description>SAS Community Planet - http://www.sascommunity.org/planet/</description>

<item>
	<title>The Princess of Science: ‫מהלימון ועד הקופקסון – מצגת‬</title>
	<guid>http://www.sci-princess.info/?p=1076</guid>
	<link>http://feedproxy.google.com/~r/sci-princess/~3/RwLAvQkN6-0/1076</link>
	<description>&amp;#8235;היום נתתי במועדון קשישים בתל-אביב הרצאה שנשאה את הכותרת: &quot;מהלימון ועד הקופקסון &amp;#8211; קיצור תולדות הנסויים הקליניים&quot;, לחיצה על הקישור תפתח קובץ pdf של מצגת ההרצאה. אני מקווה לכתוב אחלק מהדברים בצורת רשימה מסודרת כאן בבלוג בעתיד הקרוב. חלק מהדברים כבר מוכרים לכם, ומבוססים על הרשימה &quot;הסטטיסטיקה  שהצילה חיים – סיפורה של פלורנס נייטינגייל&quot; [...]&amp;#8236;</description>
	<pubDate>Thu, 18 Mar 2010 11:53:37 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - As a Chart</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-7895344553944139114</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/GjCwTq-vBjc/project-plans-in-excel-as-chart.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4FSfRfMXyI/AAAAAAAAAQs/nixhcM-hSs4/s1600-h/XlsPP_E11.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;106&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4FSfRfMXyI/AAAAAAAAAQs/nixhcM-hSs4/s200/XlsPP_E11.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The &lt;a href=&quot;http://notecolon.blogspot.com/search/label/ExcelGantt&quot;&gt;series of posts on project planning in Excel with Gantt charts&lt;/a&gt; has been very popular, and one of the most&amp;nbsp;popular&amp;nbsp;questions&amp;nbsp;has&amp;nbsp;been &quot;Why don't you use an Excel chart?&quot; Well, the answer's simple, they don't work very well for large list of&amp;nbsp;tasks. For small lists they look very nice, but they don't scale well, hence I prefer to keep my Gantt in the cells of the worksheet. However, for completeness I thought I'd offer this bonus post to show how it's done. You can see the end result alongside this paragraph (right). I'm using Excel 2003.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4E5L2lfDHI/AAAAAAAAAOs/eTuxmCdFxgQ/s1600-h/XlsPP_D6.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;69&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4E5L2lfDHI/AAAAAAAAAOs/eTuxmCdFxgQ/s200/XlsPP_D6.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;We'll start with the result from the last post, including the progress bars in the worksheet. You can see it alongside this paragraph (left). Since we used the cells to indicate progress, we were limited to showing progress in chunks of whole days. In the chart we will be&amp;nbsp;able&amp;nbsp;to show a more accurate picture of progress.&lt;br /&gt;
&lt;br /&gt;
I'm going to start by removing the groups that we had in the last result - I've never explored how they can successfully be charted. So, let's select the input data area (A2 to F9), go to the Subtotals window, and click the Remove All button (then confirm that you understand that entire rows will be removed). Our chart collapses and looks as shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S4E5NorVmQI/AAAAAAAAAO0/GsWTGXBANjU/s1600-h/XlsPP_E1.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;117&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S4E5NorVmQI/AAAAAAAAAO0/GsWTGXBANjU/s400/XlsPP_E1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt; &lt;/div&gt;&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Let's add a couple of columns that indicate the amount of progress (equivalent to column Q) and the amount remaining. So, insert a couple of columns between Start and Effort. To keep this tutorial simple, the position is important, but you could actually put these columns over to the right if you're familiar with de-selecting data series in Excel charts. Having inserted two columns, let's label them Done and Remain, and let's set their values with formulae. Put D3&amp;nbsp;=F3*H3/100, and E3&amp;nbsp;=F3-D3. In other words, Done equals Effort times %Done, and Remain equals Effort minus Done. Copy these formulae &amp;nbsp;down and you'll get the result below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4E6tGI1hgI/AAAAAAAAAO8/h2AfRzKL1tI/s1600-h/XlsPP_E2.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;102&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4E6tGI1hgI/AAAAAAAAAO8/h2AfRzKL1tI/s400/XlsPP_E2.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now select the area that contains the data to be charted, i.e. B2 to E6, and launch the Chart wizard. In step1 of the Wizard, select chart type of Bar and sub-type of Stacked Bar (see below).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4E7snEyN7I/AAAAAAAAAPE/Zbbw43uBP8c/s1600-h/XlsPP_E3.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4E7snEyN7I/AAAAAAAAAPE/Zbbw43uBP8c/s400/XlsPP_E3.JPG&quot; width=&quot;396&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Click Finish. Let's see what we've got:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4E8P7TJGTI/AAAAAAAAAPM/sfJzdKP4T9g/s1600-h/XlsPP_E4.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;151&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4E8P7TJGTI/AAAAAAAAAPM/sfJzdKP4T9g/s400/XlsPP_E4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
We can see that the order down the left side is wrong (activity #4 is above activity #3, we'd like activity #1 at the top); if we hide the purple Start bars then we'll have some nice bars that show Done and Remain.&lt;br /&gt;
&lt;br /&gt;
Right-click on the left axis, choose Format Axis, go to the Scale tab and tick Categories in reverse order. See below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4E88YO_bHI/AAAAAAAAAPU/ZgeaVJA8byk/s1600-h/XlsPP_E5.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;368&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4E88YO_bHI/AAAAAAAAAPU/ZgeaVJA8byk/s400/XlsPP_E5.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Click OK and you'll see that the order of tasks has reversed. Now right click on any of those purple Start bars, choose Format Data Series, and on the Patterns tab select Border colour of None and Area colour of None. Don't press OK yet. See below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4E9ewpXaRI/AAAAAAAAAPc/kFmZ6KeUJvY/s1600-h/XlsPP_E6.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;356&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4E9ewpXaRI/AAAAAAAAAPc/kFmZ6KeUJvY/s400/XlsPP_E6.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Then, before you click OK, go to the Data Labels tab and put a tick alongside Category Name. Now you can click OK and you'll see that the purple Start bars have disappeared.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S4E-3N8fFDI/AAAAAAAAAPs/YSK6Z1YaUss/s1600-h/XlsPP_E7.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S4E-3N8fFDI/AAAAAAAAAPs/YSK6Z1YaUss/s320/XlsPP_E7.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Get rid of the Legend by right clicking on it and selecting Clear. And get rid of the left axis labels by right clicking on one of them and selecting Clear.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4E_NsZghNI/AAAAAAAAAP0/77LoJwc1Jdw/s1600-h/XlsPP_E8.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4E_NsZghNI/AAAAAAAAAP0/77LoJwc1Jdw/s320/XlsPP_E8.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
It's starting to look like what we want. Right click on one of the activity labels and select Format Data Labels. On the Alignment tab, select Right for Horizontal alignment, and Inside End for Label Position. See below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4E_ti07BYI/AAAAAAAAAP8/teGB_ymp5d4/s1600-h/XlsPP_E9.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4E_ti07BYI/AAAAAAAAAP8/teGB_ymp5d4/s320/XlsPP_E9.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Click OK. The labels look neat (although the labels for activity #1 and #3 unavoidably overlap the bars because of the limitations of the left margin).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4FQGPsUXKI/AAAAAAAAAQE/X79f_77PneI/s1600-h/XlsPP_E10.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4FQGPsUXKI/AAAAAAAAAQE/X79f_77PneI/s320/XlsPP_E10.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Right, let's make it look a bit more snappy. Click on the grey background and select Clear; click on the top axis, select Format Axis, and select Lines as None in the Patterns tab; click on the border of the chart and select Format Chart Area, select Round Corners on the Patterns tab, and also select Fill Effects for the Area and then choose one colour and apply a vertical shading style. After having set the fonts to bold, the&amp;nbsp;grid-lines&amp;nbsp;to grey, and bar colours to red and green, here's my result:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4FSfRfMXyI/AAAAAAAAAQs/nixhcM-hSs4/s1600-h/XlsPP_E11.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4FSfRfMXyI/AAAAAAAAAQs/nixhcM-hSs4/s320/XlsPP_E11.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
They say beauty is in the eye of the beholder, so you may think it looks snappy, or you may not.&amp;nbsp;Either&amp;nbsp;way, it's an eye-catching Gantt chart.&lt;br /&gt;
&lt;br /&gt;
As I said at the top, I find these charts creak under the strain of a larger number of tasks, and they become troublesome to print, hence I prefer using the cells of the worksheet.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-7895344553944139114?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/GjCwTq-vBjc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 17 Mar 2010 19:20:07 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - Tracking to Completion</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-3405695519294021522</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/guxnY5iG5yk/project-plans-in-excel-tracking-to.html</link>
	<description>&lt;a href=&quot;http://www.blogger.com/&quot;&gt;&lt;/a&gt;&lt;span id=&quot;goog_1266757369247&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1266757369248&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4ExymQ6ndI/AAAAAAAAAOc/npMIQNMEX88/s1600-h/XlsPP_D6.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;69&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4ExymQ6ndI/AAAAAAAAAOc/npMIQNMEX88/s200/XlsPP_D6.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The &lt;a href=&quot;http://notecolon.blogspot.com/search/label/ExcelGantt&quot;&gt;series on maintaining a project plan and&amp;nbsp;Gantt&amp;nbsp;chart in Excel&lt;/a&gt; has been popular, and I've had a lot of queries about tracking progress. So, in this bonus post I’ll describe how to display tasks’ progress on the Gantt chart that was featured in the previous posts in this series. In addition, I’ll show how to highlight “today”. Alongside this paragraph (right) you can see what the result of this post looks like.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4Exz-1y9XI/AAAAAAAAAOk/7ItER0DPWKA/s1600-h/XlsPP_C5.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;82&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4Exz-1y9XI/AAAAAAAAAOk/7ItER0DPWKA/s200/XlsPP_C5.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;In the three previous posts in this series I described how to create a neat and simple Gantt chart, how to add dates to the day numbers, and how to group tasks. These three simple sets of steps have given the developer sufficient knowledge to quickly create a simple but effective Gantt chart that demonstrates the developer is in control of the project (without spending more time on planning than on delivery). Alongside this paragraph (left) you can see what the results of our previous efforts looks like.&lt;br /&gt;
&lt;br /&gt;
Let’s start by inserting a column after E and heading it “%Done”. This is where you'll need to type values to indicate your progress. Then, after column N let’s add “Done” and “DoneEnd”. I’ve made the text colour of the latter two columns a semi-visible grey because they’re our working values and not of interest to the reader of the Gantt chart. If you see the picture below, you’ll see that I’ve also populated the %Done column with some values.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4Exp8zbcBI/AAAAAAAAAN0/YiXUPMMTrSg/s1600-h/XlsPP_D1.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;141&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4Exp8zbcBI/AAAAAAAAAN0/YiXUPMMTrSg/s400/XlsPP_D1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now let’s populate the calculated columns. The working columns are not strictly necessary, but they’ll help illustrate the calculations that we’re doing. Firstly, let’s understand what we’re trying to achieve. Cell H3 represents progress on activity #1 on day 1. We’ll display a block in the cell if progress on the activity is equal to (or greater than) half a day’s effort. So, for activity #1 we can see that effort is complete up to the end of day 3; for activity #2 the effort is complete up to 2/3 of the way through day number 2. Since day number 2 for activity #2 is more than half complete we’ll put a block in that cell (but not day number 3).&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Let’s set Done to show the amount of effort completed, i.e. %Done times Effort (so Q3 =D3*F3/100). We’ll use DoneEnd to indicate the cell location where the completed effort ends (so R3 =C3-1+(F3*D3/100)). &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4Exr-oh-KI/AAAAAAAAAN8/fXcrPhYnlvY/s1600-h/XlsPP_D2.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;138&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4Exr-oh-KI/AAAAAAAAAN8/fXcrPhYnlvY/s400/XlsPP_D2.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
DoneEnd=1.6 in cell R4 tells us that the effort is complete up to 0.6 of the way through the cell that represents day 2. So we’d place in block in day 1 and we’d also place a block in day 2 because it’s more than half complete.&lt;br /&gt;
&lt;br /&gt;
We’ve previously used conditional formatting to indicate the start and end dates, so we’ll use formulae to shows blocks for completed effort in appropriate cells. The formula for cell H3 is =IF(AND($C3&amp;lt;=H$2,H$2-0.5&amp;lt;=$R3),&quot;n&quot;,&quot;&quot;). Once we’ve spread this across the whole of the Gantt we get the following result.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4Exts5_M8I/AAAAAAAAAOE/UKuMxwrjbIU/s1600-h/XlsPP_D3.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;138&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S4Exts5_M8I/AAAAAAAAAOE/UKuMxwrjbIU/s400/XlsPP_D3.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Oh, and change the font for the Gantt area to Wingdings so the blocks appear as blocks rather than lower-case n characters! You can also change the text colour to something other than black.&lt;br /&gt;
&lt;br /&gt;
So, we now have %Done bars (blocks) overlaying our basic start-to-end Gantt bars. But we’ve avoided doing this for the grouped bars. Why? Well, we can calculate %Done as the sum of Done for the group divided by total effort for the group, i.e. F5 =100*Q5/D5 (first, you need to set Q5 to =SUBTOTAL(9,Q3:Q4)), but if you add this as blocks in the Gantt you’ll see that the bars run from day 1 to day 4 despite the fact that the individual activities for group Alpha have not hit day 4 yet. This can be confusing for the reader of the Gantt, so I usually keep the calculation, but remove the progress bars, leaving the end result below. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4Exu3sXM6I/AAAAAAAAAOM/GVB8XM83w8A/s1600-h/XlsPP_D4.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;140&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S4Exu3sXM6I/AAAAAAAAAOM/GVB8XM83w8A/s400/XlsPP_D4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In addition to copying D5 to Q5, I’ve deleted R5 (just for clarity, because we’re not using it). And I hope you realised you need to do similar things in the other grouped rows, so Q8 contains =SUBTOTAL(9,Q6:Q7), and Q9 contains =SUBTOTAL(9,Q3:Q7).&lt;br /&gt;
&lt;br /&gt;
Finally, I said I’d highlight “today”. Well that's easy, select the date cells (H1 to O1), open-up Conditional Formatting and set the formula =IF(H1=TODAY(),1,0). I’ve chosen to use white text on a black background:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S4ExwR5W0yI/AAAAAAAAAOU/S-VQ7RrS2Wg/s1600-h/XlsPP_D5.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;127&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S4ExwR5W0yI/AAAAAAAAAOU/S-VQ7RrS2Wg/s400/XlsPP_D5.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Here’s the final spreadsheet:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4ExymQ6ndI/AAAAAAAAAOc/npMIQNMEX88/s1600-h/XlsPP_D6.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;138&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S4ExymQ6ndI/AAAAAAAAAOc/npMIQNMEX88/s400/XlsPP_D6.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Neat!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-3405695519294021522?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/guxnY5iG5yk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 17 Mar 2010 19:18:42 +0000</pubDate>
</item>
<item>
	<title>SAS from Out in Left Field: Excel Pivot Tables and Filtering</title>
	<guid>tag:blogger.com,1999:blog-20769129.post-2473815307267947296</guid>
	<link>http://savian.blogspot.com/2010/03/excel-pivot-tables-and-filtering.html</link>
	<description>So I get a post this morning from my client saying everything looks great and they can't find any issues with the latest release. Happy moment, cigar time.&lt;br /&gt;&lt;br /&gt;Well, at this point I am over on the project and am working on my own time. That's fine considering that there might be future business there. Ok, so they mention 2 minor items that are annoyances that would be perfect. No obligation to do them but I have a few minutes so I dive in.&lt;br /&gt;&lt;br /&gt;5 hours later I have it working. What was the issue? Pivot Tables in Excel and setting their filter values. For those poor saps who have to deal with it in the future, here is some C# code to hopefully save you some time:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        private static void HandlePivotTableChanges(string p)&lt;br /&gt;        {&lt;br /&gt;            FindProcessInstances();&lt;br /&gt;            Console.WriteLine(&quot;Starting Excel. Please be patient while it loads.&quot;);&lt;br /&gt;            string format = &quot;'Product_Container_Release_Metrics_Workbook.xls'!Format_Workbook&quot;;&lt;br /&gt;            Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();&lt;br /&gt;            ExcelApp.DisplayAlerts = false;&lt;br /&gt;            Console.WriteLine(&quot;Opening workbook.&quot;);&lt;br /&gt;            Workbook wb = ExcelApp.Workbooks.Open(p, m, m, m, m, m, m, m, m, m, m, m, m, m, m);&lt;br /&gt;            Console.WriteLine(&quot;Running macro.&quot;);&lt;br /&gt;            ExcelApp.RunMacro(format);&lt;br /&gt;            Worksheet ws = (Worksheet)wb.Worksheets[&quot;Pivot Tables&quot;];&lt;br /&gt;            string pivotTable = &quot;Forecast to Go&quot;;&lt;br /&gt;            PivotTable pt = (PivotTable)ws.PivotTables(pivotTable);&lt;br /&gt;            pt.ManualUpdate = true;&lt;br /&gt;            PivotField pf = (PivotField)pt.PivotFields(&quot;Release (A)&quot;);&lt;br /&gt;            PivotItems items = (PivotItems)pf.PivotItems(m);&lt;br /&gt;&lt;br /&gt;            foreach (PivotItem item in items)&lt;br /&gt;            {&lt;br /&gt;                    if (item.Value != string.Empty)  // --- CRITICAL LINE. Filters must have at least 1 value selected. Exception otherwise.&lt;br /&gt;                        ((PivotItem) items.Item(item.Value)).Visible = false;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            pt.ManualUpdate = false;&lt;br /&gt;            ExcelApp.Calculation = XlCalculation.xlCalculationAutomatic;&lt;br /&gt;            Console.WriteLine(&quot;Saving workbook.&quot;);&lt;br /&gt;            wb.Save();&lt;br /&gt;            wb.Close(false, m, m);&lt;br /&gt;            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wb);&lt;br /&gt;            Console.WriteLine(&quot;Closing Excel.&quot;);&lt;br /&gt;            ExcelApp.Quit();&lt;br /&gt;            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ExcelApp);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void FindProcessInstances()&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(&quot;Finding open processes.&quot;);&lt;br /&gt;            KillProcesses(&quot;Excel&quot;);&lt;br /&gt;            KillProcesses(&quot;PowerPnt&quot;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void KillProcesses(string processName)&lt;br /&gt;        {&lt;br /&gt;            Process[] processes = Process.GetProcessesByName(processName);&lt;br /&gt;            if (processes.Length &gt; 0)&lt;br /&gt;            {&lt;br /&gt;                foreach (var p in processes)&lt;br /&gt;                {&lt;br /&gt;                    p.Kill();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static void RunMacro(this Application app, string macro)&lt;br /&gt;        {&lt;br /&gt;            app.Run(macro,&lt;br /&gt;                    m, m, m, m, m, m, m, m, m, m,&lt;br /&gt;                    m, m, m, m, m, m, m, m, m, m,&lt;br /&gt;                    m, m, m, m, m, m, m, m, m, m&lt;br /&gt;                );&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/20769129-2473815307267947296?l=savian.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 17 Mar 2010 13:40:39 +0000</pubDate>
</item>
<item>
	<title>StudySAS Blog: PRXMATCH Function</title>
	<guid>tag:blogger.com,1999:blog-2315822260943695633.post-871547742245846317</guid>
	<link>http://feedproxy.google.com/~r/sastips/~3/0FMj8Cj1f5Y/prxmatch-function.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/bQ0oo4TAAJetmPPeaaV1GENY80o/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/bQ0oo4TAAJetmPPeaaV1GENY80o/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/bQ0oo4TAAJetmPPeaaV1GENY80o/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/bQ0oo4TAAJetmPPeaaV1GENY80o/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;Prxmatch () function is very useful in locating the matching strings. Prxmatch() function has 2 parameters, the first parameter is the regular expression ID (i.e what you are looking in a string for a match) and the second parameter is the character string to be searched. PRXMATCH () function returns the start position of the matching string. 





Syntax: 



PRXMATCH (perl-regular-expression, source);



Even though PRXMATCH function can be used when....

1) When you want to identify if there is alphanumeric (has any letter from A to Z) in a variable.

2) If you need to search a character variable for multiple different substrings.



Here is&amp;nbsp;how PRXMATCH works in the Ist case.



*Prxmatch () function is very useful in locating the matching strings;



DATA finda2z; 

INPUT ID $ 1-3 string $ 5-10; 

prxmatch=prxmatch(&quot;/[a-zA-Z]/&quot;,string); 

DATALINES; 

001 ACBED 

002 11 

003 12 

004 zx 

005 11 2c 

006 abc123

; 

run; 






proc print; 

run; 



Output:





*Here...&lt;br /&gt;
&lt;br /&gt;
[[ This is a content summary only. Visit my website for full links, other content, and more! ]]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=0FMj8Cj1f5Y:SqNhjc5Ph5Y:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=0FMj8Cj1f5Y:SqNhjc5Ph5Y:63t7Ie-LG7Y&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=63t7Ie-LG7Y&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=0FMj8Cj1f5Y:SqNhjc5Ph5Y:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?i=0FMj8Cj1f5Y:SqNhjc5Ph5Y:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=0FMj8Cj1f5Y:SqNhjc5Ph5Y:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?i=0FMj8Cj1f5Y:SqNhjc5Ph5Y:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=0FMj8Cj1f5Y:SqNhjc5Ph5Y:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=0FMj8Cj1f5Y:SqNhjc5Ph5Y:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/0FMj8Cj1f5Y&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 17 Mar 2010 09:31:06 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: Analytics: getting sportier all of the time</title>
	<guid>http://blogs.sas.com/sasdummy/index.php?/archives/159-guid.html</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/QRyehxVjvn8/index.php</link>
	<description>It's March, and in North Carolina all of the talk is about college basketball.  At SAS, we like to brag about how &lt;a href=&quot;http://www.unf.edu/~jcoleman/dance.htm&quot; title=&quot;The big dance!&quot;&gt;these guys use SAS analytics&lt;/a&gt; to predict the NCAA &quot;dance card&quot; with astounding results.  This year, the &lt;a href=&quot;http://news.mync.com/site/news/story2/49478/sports-conference-bias-at-big-dance/&quot; title=&quot;T.K. from SAS on NBC-17&quot;&gt;fun question revolves around conference bias&lt;/a&gt; and how it affects a team's chances.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://blogs.sas.com/sascom/index.php?/archives/551-Bringing-Down-the-House-with-Jeff-Ma.html&quot; title=&quot;Jeff Ma talks about sports analytics&quot;&gt;use of analytics has evolved as an important sports discipline&lt;/a&gt; in recent years.  It's not just baseball, a sport known for its statistics.  Anything that can be quantified or categorized can be analyzed for influence, &lt;a href=&quot;http://www.nytimes.com/2006/05/07/magazine/07wwln_freak.html?_r=2&amp;amp;oref=slogin&amp;amp;pagewanted=all&quot; title=&quot;Freakonomics article&quot;&gt;including the birth month of professional soccer players.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
My friend Drew Cannon, a high school student himself just a couple of years ago, applies analytical research to the business of recruiting high-school basketball players onto college teams.  Drew's efforts are &lt;a href=&quot;http://www.nytimes.com/2010/03/16/sports/basketball/16ncaa.html?hp&quot; title=&quot;Drew in the NYT, wow!&quot;&gt;highlighted in a New York Times article&lt;/a&gt; today.   
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/QRyehxVjvn8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 14:32:27 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: "SAS Talks" Has a Home</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-2883673945368544720</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/yMvK-MUvW9s/note-sas-talks-has-home.html</link>
	<description>The excellent &lt;i&gt;SAS Talks&lt;/i&gt; series of free webinars (previously featured in &lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt;) has now got &lt;a href=&quot;http://support.sas.com/community/events/sastalks/&quot;&gt;a home page&lt;/a&gt; where you can find previously recorded talks, plus information about upcoming talks.&lt;br /&gt;
&lt;br /&gt;
So, you can now easily catch-up with the previous talks on SAS Enterprise Guide, SAS/IML, ODS statistical graphics, and multi-sheet output for Microsoft Excel from SAS.&lt;br /&gt;
&lt;br /&gt;
The page shows two upcoming talks: Modifying ODS Statistical Graphics Templates in V9.2 later in March, and Formats and the Format Procedure in April. Registration for the former opens today. If you watch it live you can question the speaker.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-2883673945368544720?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/yMvK-MUvW9s&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 13:15:00 +0000</pubDate>
</item>
<item>
	<title>The Princess of Science: ‫הודעה מנהלתית על חידון פיי‬</title>
	<guid>http://www.sci-princess.info/?p=1072</guid>
	<link>http://feedproxy.google.com/~r/sci-princess/~3/8R9e2xkD4Bs/1072</link>
	<description>&amp;#8235;קיבלתי כמה תגובות (בבלוג ובמייל) בהן נתבקשתי לפרסם את התשובות לחידון הפיי שפרסמתי בתחילת השבוע. אני מציע שהקוראים ינסו את כוחם ויכתבו את תשובותיהם בתגובות לחידון. אפרסם את התשובות מתישהו בשבוע הבא.

	לקריאה נוספת בנושאים הקשורים לנושא רשימה זו
	
	אין רשימות קשורות .
	

&amp;#8236;</description>
	<pubDate>Tue, 16 Mar 2010 09:28:33 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: An efficient macro for Stump - two terminal nodes tree</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-6398818464872578362</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/5pZf-0aC1Oo/efficient-macro-for-stumps-recursive.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/mJ4iLVOomNaC17pQgYt4vW5voM8/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/mJ4iLVOomNaC17pQgYt4vW5voM8/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/mJ4iLVOomNaC17pQgYt4vW5voM8/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/mJ4iLVOomNaC17pQgYt4vW5voM8/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;In this post, I post an improved&amp;nbsp;SAS macro of the&amp;nbsp;single partition&amp;nbsp;split algorithm in Chapter 2 of &quot;&lt;strong&gt;Pharmaceutical Statistics Using SAS: A Practical Guide&quot;&lt;/strong&gt; &lt;em&gt;by Alex Dmitrienko, Christy Chuang-Stein, Ralph B. D'Agostino&lt;/em&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The single partition split algorithm is a simplified version of Stumps, and&amp;nbsp;is a weak classifier, usually used to form the base weak learner for boosting algorithm. This specific classifier seeks to separate the space into 2 subspaces for&amp;nbsp;independent variables where each subspace has increasingly higher purity of the response classes, say 1 and 0. In the examples, Gini Index is used to measure purity/impurity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The SAS example&amp;nbsp;macro &lt;strong&gt;%SPLIT&lt;/strong&gt;&amp;nbsp;in the book (found @ &lt;a href=&quot;http://ftp.sas.com/samples/A60622&quot;&gt;Here&lt;/a&gt;) is for illustration purpose, and&amp;nbsp;is so inefficient&amp;nbsp;that it&amp;nbsp;practically can't be used by industrial standard. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I modified this macro and made it usable in real&amp;nbsp;business applications where millions of observations and hundreds of variables are more than common.&lt;/div&gt;&lt;br /&gt;
Improved Code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;

%macro Dsplit(dsn, p);
/************************************************/
/* dsn: Name of input SAS data sets. All        */
/*        independent variables should be named */
/*        as X1, X2,....,Xp and be continous    */
/*        numeric variables                     */
/*   p: Number of independent variables         */
/************************************************/
options nonotes;
%do i=1 %to &amp;amp;p;
proc sort data=&amp;amp;dsn.(keep=y w x&amp;amp;i)  out=work.sort; by x&amp;amp;i;
run;

proc means data=work.sort noprint;
     var y;
     weight w;
     output out=_ysum  n(y)=ntotal  sum(y)=ysum;
run;
data _null_;
     set _ysum;
     call symput('ntotal', ntotal);
     call symput('ysum', ysum); 
run;
data y_pred;
     set work.sort  end=eof;
     array _p[&amp;amp;ntotal, 2] _temporary_;
     array _g[&amp;amp;ntotal, 2] _temporary_;
     array _x[&amp;amp;ntotal]    _temporary_;
     retain _y1  _oldx 0;
     if _n_=1 then _oldx=x&amp;amp;i;
     _x[_n_]=x&amp;amp;i;
     if ^eof then do;
        _y1+y; 
       _p[_n_, 1]=_y1/_n_; _p[_n_, 2]=(&amp;amp;ysum-_y1)/(&amp;amp;ntotal-_n_);
       ppn1=_n_/&amp;amp;ntotal;  ppn2=1-ppn1;
       _g[_n_, 1]=2*(ppn1*(1-_p[_n_, 1])*_p[_n_, 1]+ppn2*(1-_p[_n_, 2])*_p[_n_, 2]);
       if _n_&amp;gt;1 then _g[_n_-1, 2]=(_oldx+x&amp;amp;i)/2;
       _oldx=x&amp;amp;i;
     end;
     else do;
       _g[_n_-1, 2]=(_oldx+x&amp;amp;i)/2;
       ginimin=2;
       do i=1 to &amp;amp;ntotal-1;
          gini=_g[i, 1]; x&amp;amp;i=_g[i, 2];
          keep gini x&amp;amp;i;
          output;
     if gini lt ginimin then do;
        ginimin=gini; xmin=x&amp;amp;i;
            p1_LH=_P[i, 1]; p0_LH=1-p1_LH;
              p1_RH=_P[i, 2]; p0_RH=1-p1_RH;
        c_L=(p1_LH&amp;gt;0.5); c_R=(p1_RH&amp;gt;0.5);
    end;
       end;
     end;  
     do i=1 to &amp;amp;ntotal;
        if _x[i]&amp;lt;=xmin then y_pred=c_L;
        if _x[i]&amp;gt;xmin  then y_pred=c_R;
        keep y_pred y w; output y_pred;
     end;
     call symput('ginimin', ginimin);
     call symput('xmin', xmin);
     end;
run;
data _giniout&amp;amp;i;
     length varname $ 8;
     varname=&quot;x&amp;amp;i&quot;;
     cutoff=&amp;amp;xmin;
     gini=&amp;amp;ginimin;
run;
%end;
data outsplit;
     set %do i=1 %to &amp;amp;p;
            _giniout&amp;amp;i
         %end;;
run;
proc datasets library=work nolist;
     delete _giniout:;
quit;
option notes;    
%mend;

/* pure stump rules */

%macro stump(dsn, p);
/************************************************/
/* dsn: Name of input SAS data sets. All        */
/*        independent variables should be named */
/*        as X1, X2,....,Xp and be continous    */
/*        numeric variables                     */
/*   p: Number of independent variables         */
/************************************************/
options nonotes;
%do i=1 %to &amp;amp;p;
proc sort data=&amp;amp;dsn.(keep=y w x&amp;amp;i)  out=work.sort; by x&amp;amp;i; run;

data _null_;
     set work.sort  end=eof  nobs=ntotal;
  retain _wsum _ysum;
  _wsum+w; _ysum+y*w;
  if eof then do;
     factor=ntotal/_wsum;
     call symput('ysum', compress(_ysum*factor));
  call symput('ntotal', compress(ntotal));
  call symput('factor', compress(factor));
  end;
run;

%put factor=&amp;amp;factor;
%put ysum=&amp;amp;ysum;

data _giniout&amp;amp;i;
     array _p[2] _temporary_;
     array _g[2] _temporary_;
     array _x[1] _temporary_;
     retain ginimin   xmin  _y1  _oldx _cn ;
     if _n_=1 then do;
        ginimin=2; xmin=x&amp;amp;i; _y1=0; _oldx=0; _cn=0;
     end;    
     do while (^eof);
        set work.sort  end=eof;
        _y1+y*w*&amp;amp;factor; _cn=_cn+w*&amp;amp;factor;
        if _cn=0 then _p[1]=0; else _p[1]=_y1/_cn; 
        if _cn=&amp;amp;ntotal then _p[2]=0; else _p[2]=(&amp;amp;ysum-_y1)/(&amp;amp;ntotal-_cn);
        ppn1=_cn/&amp;amp;ntotal;  ppn2=1-ppn1;
        _g[1]=2*(ppn1*(1-_p[1])*_p[1]+ppn2*(1-_p[2])*_p[2]);
        if _n_=1 then _g[2]=x&amp;amp;i; else _g[2]=(_oldx+x&amp;amp;i)/2;
        _oldx=x&amp;amp;i;
        if _g[1]2 then do; 
        ginimin=2; xmin=(_oldx+x&amp;amp;i)/2; 
     end; 
     varname=&quot;x&amp;amp;i&quot;;
     keep varname  ginimin  xmin;
     output;
     stop;
run;
%end;
data outsplit;
     set %do i=1 %to &amp;amp;p;
            _giniout&amp;amp;i
         %end;;
run;
proc datasets library=work nolist;
     delete _giniout:;
quit;
option notes;    
%mend;

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Comparing the time used and results. &lt;br /&gt;
&lt;br /&gt;
The example data used is the AUC Small training data, 200 sets of predictors for 15,000 ratings, from &lt;strong&gt;&lt;em&gt;AusDM2009 competition&lt;/em&gt;&lt;/strong&gt;, and can be found @ &lt;a href=&quot;http://www.tiberius.biz/ausdm09/#3&quot;&gt;Here&lt;/a&gt; .&lt;br /&gt;
&lt;br /&gt;
Using example code from the book, it takes &lt;strong&gt;1563 seconds&lt;/strong&gt; on a regular Windows desktop&amp;nbsp;(Core2Duo E6750 2.67GHz, 4GB Memory, 7K2 rpm HDD with 8MB cache) to process 5 numerical continous variables, whereas with improved macro, it only takes 1 second to process the same amount of data. This improvement is criticle since weak classifiers like this one&amp;nbsp;won't be used alone, but as the base for more time-consuming Boosting algorithms. With original macro, it is practically not usable for any boosting algorithms&amp;nbsp;on data sets&amp;nbsp;with&amp;nbsp;hundreds of or more observations.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;Original Macro:&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;center&quot; class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/S3xINSpn_PI/AAAAAAAAAMs/3nTJf9um9rw/s1600-h/Splite+Macro.PNG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;338&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/S3xINSpn_PI/AAAAAAAAAMs/3nTJf9um9rw/s640/Splite+Macro.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;Improved Macro:&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S3xFwtCB2PI/AAAAAAAAAMc/Qkqywdd0uV8/s1600-h/Split+My+Macro.PNG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;524&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S3xFwtCB2PI/AAAAAAAAAMc/Qkqywdd0uV8/s640/Split+My+Macro.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Comparing the results from original macro and the improved macro, they both select X3 with the same partition cut off point and the same Gini Index.&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S3xLRXTdXKI/AAAAAAAAAM0/R-Ocgj9_NtM/s1600-h/Results.PNG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S3xLRXTdXKI/AAAAAAAAAM0/R-Ocgj9_NtM/s640/Results.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img height=&quot;78&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S3xFxhzHhRI/AAAAAAAAAMk/-An3C8smEWQ/s320/Splite+Macro.PNG&quot; width=&quot;96&quot; /&gt; &lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;
&lt;/div&gt;Reference:&lt;br /&gt;
&lt;b&gt;Pharmaceutical Statistics Using SAS: A Practical Guide &lt;/b&gt;&lt;i&gt;by Alex Dmitrienko, Christy Chuang-Stein, Ralph B. D'Agostino&lt;/i&gt;, SAS Publishing 2007&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.amazon.com/Pharmaceutical-Statistics-Using-SAS-Practical/dp/159047886X?ie=UTF8&amp;amp;tag=xie1978&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Pharmaceutical Statistics Using SAS: A Practical Guide (SAS Press)&quot; src=&quot;http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=159047886X&amp;amp;tag=xie1978&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=xie1978&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=159047886X&quot; width=&quot;1&quot; /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-6398818464872578362?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/5pZf-0aC1Oo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:34:18 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: SAS implementation of Kernel PCA</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-2985745247442617647</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/fde1uilIGYk/sas-implementation-of-kernel-pca.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/dYlF-Na6KkvX6PWw2HkeFwDVEJQ/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/dYlF-Na6KkvX6PWw2HkeFwDVEJQ/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/dYlF-Na6KkvX6PWw2HkeFwDVEJQ/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/dYlF-Na6KkvX6PWw2HkeFwDVEJQ/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;Kernel method is a very useful technique in data mining that is applicable to any algorithms&amp;nbsp;relying on inner product [1]. The key is applying appropriate kernel function to the inner product of original data space.&lt;br /&gt;
&lt;br /&gt;
I show here SAS/STAT+BASE example code for Kernel PCA implementation.&amp;nbsp;The example used is from&amp;nbsp;Wikipedia&amp;nbsp;@ &lt;a href=&quot;http://en.wikipedia.org/wiki/Kernel_PCA&quot;&gt;here&lt;/a&gt;.&amp;nbsp;Extention to other algorithms that suitable for Kernel method, such as&amp;nbsp;CCA, ICA, LDA,&amp;nbsp;etc, is straightforward.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;Reference:&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
[1]. Zhu, Mu, &quot;&lt;em&gt;&lt;strong&gt;Kernels and Ensembles: Perspectives on Statistical Learning&lt;/strong&gt;&lt;/em&gt;&quot;, The American Statistician. May 1, 2008, 62(2): 97-109&lt;br /&gt;
&lt;br /&gt;
Figure 1. Linear PCA Result. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S2z1U04QQYI/AAAAAAAAAL0/lMTTS1iszSc/s1600-h/linear_U.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;435&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S2z1U04QQYI/AAAAAAAAAL0/lMTTS1iszSc/s640/linear_U.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
Figure 2.&amp;nbsp;Result of Kernel PCA of Inner Product on quadratic polynomial formula&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S2z1Xv_fECI/AAAAAAAAAL8/XkCj0G6X7u0/s1600-h/kernel_U.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;435&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S2z1Xv_fECI/AAAAAAAAAL8/XkCj0G6X7u0/s640/kernel_U.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Figure 3. Result of Kernel PCA of Frobenius Norm on Gassian Kernel&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S4uAv7ODy5I/AAAAAAAAAOE/2s73ARGYyVw/s1600-h/Gauss+Kernel.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S4uAv7ODy5I/AAAAAAAAAOE/2s73ARGYyVw/s640/Gauss+Kernel.png&quot; width=&quot;590&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
SAS demo code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
/* Demonstrate kernel PCA. Kernel method can be applied to any algorithm that relies on inner product */
data original;
     do ID=-314 to 314;
        x1=sin(ID/100)*1+rannor(8976565)*0.1; x2=cos(ID/100)*1+rannor(92654782)*0.1; Class=1; output;
        x1=sin(ID/100)*2+rannor(8976565)*0.1; x2=cos(ID/100)*2+rannor(92654782)*0.1; Class=2; output;
        x1=sin(ID/100)*3+rannor(8976565)*0.1; x2=cos(ID/100)*3+rannor(92654782)*0.1; Class=3; output;
     end;
run;

/*------------ Linear PCA -----------*/
proc princomp data=original  standard noint cov  
              outstat=lin_stat(where=(_TYPE_ = 'USCORE'))
              noprint;
        var x1 x2;
run;


data lin_stat_score;
     set lin_stat;
     _TYPE_= 'PARMS';
run;

proc score data=original   score=lin_stat_score  type=parms   out=lin_pca;
     var x1 x2;
run;

proc gplot data=lin_pca;
        plot Prin1*Prin2=Class;
run;quit;


/*--------- Kernel PCA 1.0 ------------*/
/* Inner product based kernel PCA */
proc transpose data=original(drop=ID  Class) out=original_t; run;

proc corr data=original_t  outp=inner(where=(_TYPE_='SSCP' &amp;amp; substr(_NAME_, 1, 3)='COL')  drop=intercept)  sscp noprint;
     var col:;
run;

/* apply kernel functon to inner product matrix. Here we use (X'Y+1)^2, the one used in wikipedia.org example. */
data inner;
     set inner;
     array _C{*} _numeric_;
     _TYPE_='COV';
     do j=1 to dim(_C); _C[j]=(_C[j]+1)**2; end;
     drop j;
run;

proc princomp data=inner    noint  cov  standard 
              outstat=k_stat(where=(_TYPE_ in ('EIGENVAL', 'USCORE')) )
              noprint;
     var col:;
run;

data S(drop=_NAME_)  score;
     set k_stat;
     if _TYPE_='EIGENVAL' then output S; else output score;
     drop _TYPE_;
run;

data _null_;
     set S;
     array _S{*} _numeric_;
     do j=1 to dim(_S);
        if _S[j]&amp;lt;0.5*constant('MACEPS') then do;
          call symput('maxsingval', j-1); stop;
        end;
     end;
run;
%put &amp;amp;maxsingval;

data score; set score; if _n_&amp;gt;&amp;amp;maxsingval then delete; retain _TYPE_ 'PARMS';  run;

proc score data=inner   score=score  type=parms  out=k_U(keep=Prin:);
        var col:;
run;

data k_U;
     set original(keep=ID Class  x1 x2)  ;
     set k_U;
run;

proc gplot data=k_U; 
     plot Prin1*Prin2=Class;
run;quit;


/*--------- Kernel PCA 2.0------------*/
/* Frobenius norm based kernel PCA */
proc transpose data=original(drop=ID  Class) out=original_t; run;

proc corr data=original_t  outp=inner(where=(_TYPE_='SSCP' &amp;amp; substr(_NAME_, 1, 3)='COL')  drop=intercept)  sscp noprint;
     var col:;
run;

proc means data=original_t noprint ;
         var col:;
         output out=_uss(drop=_TYPE_    _FREQ_)    uss= /autoname;
run;

proc transpose data=_uss  out=_usst; run;

proc sql noprint;
          select nobs into :NCOLS from sashelp.vtable
          where libname='WORK'
              and memtype='DATA'
              and memname='_USST'
              ;
quit;
%let ncols=%sysfunc(compress(&amp;amp;NCOLS));
%put &amp;amp;ncols;

/* apply kernel functon to inner product matrix. Here we use Gaussian kernel function. */
data inner;
          array _X{&amp;amp;ncols} COL1-COL&amp;amp;ncols;
          array _USS0{&amp;amp;ncols}  _temporary_;
          if _n_=1 then do;
             do j=1 to &amp;amp;ncols;
                  set  _usst(keep=COL1)  point=j;
                  _USS0[j]=COL1;
             end;
          end;
          set inner;
          _TYPE_='COV';
          do j=1 to &amp;amp;ncols;
              _X[j]=_USS0[_n_] + _USS0[j] - 2*_X[j];
              _X[j]=exp(-0.5*_X[j]/&amp;amp;sigma);
          end;
          keep _TYPE_  _NAME_ COL1-COL&amp;amp;ncols;
run;


proc princomp data=inner    noint  cov  standard 
              outstat=k_stat(where=(_TYPE_ in ('EIGENVAL', 'USCORE')) )
              noprint;
     var col:;
run;

data S(drop=_NAME_)  score;
     set k_stat;
     if _TYPE_='EIGENVAL' then output S; else output score;
     drop _TYPE_;
run;

data _null_;
     set S;
     array _S{*} _numeric_;
     do j=1 to dim(_S);
        if _S[j]&amp;lt;0.5*constant('MACEPS') then do;
          call symput('maxsingval', j-1); stop;
        end;
     end;
run;
%put &amp;amp;maxsingval;

data score; set score; if _n_&amp;gt;&amp;amp;maxsingval then delete; retain _TYPE_ 'PARMS';  run;

proc score data=inner   score=score  type=parms  out=k_U(keep=Prin:);
        var col:;
run;

data k_U;
     set original(keep=ID Class  x1 x2)  ;
     set k_U;
run;

proc gplot data=k_U; 
     plot Prin1*Prin2=Class;
run;quit;

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Further Reading:&lt;br /&gt;
Chapter 1 &amp;amp; 2 of&lt;br /&gt;
&lt;b&gt;Principal Manifolds for Data Visualization and Dimension Reduction&lt;/b&gt; &lt;i&gt;by A. Gorban, B. Kegl, D. Wunsch, A. Zinovyev (Eds.)&lt;/i&gt; Lecture Notes in Computational Science and Engineering, Springer 2007&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.amazon.com/Principal-Manifolds-Visualization-Computational-Engineering/dp/3540737499?ie=UTF8&amp;amp;tag=xie1978&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Principal Manifolds for Data Visualization and Dimension Reduction (Lecture Notes in Computational Science and Engineering)&quot; src=&quot;http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=3540737499&amp;amp;tag=xie1978&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=xie1978&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=3540737499&quot; width=&quot;1&quot; /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-2985745247442617647?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/fde1uilIGYk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:32:45 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: Transform a Hierarchical Long To Wide Format with Large Number of Heterogeneous Variables</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-115129718592051330</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/Y5y4YNRkjP8/transform-hierarchical-long-to-wide.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/KiY4XNLojzuJ8dcp3uJx5HEntMI/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/KiY4XNLojzuJ8dcp3uJx5HEntMI/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/KiY4XNLojzuJ8dcp3uJx5HEntMI/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/KiY4XNLojzuJ8dcp3uJx5HEntMI/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S58Vnm4QM7I/AAAAAAAAAOc/o2XguuAnuGU/s1600-h/P1.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S58Vnm4QM7I/AAAAAAAAAOc/o2XguuAnuGU/s640/P1.png&quot; width=&quot;467&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/1975/729/1600/P6.jpg&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S58V0JuY76I/AAAAAAAAAOk/oFmDm5eCFAg/s1600-h/P2.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S58V0JuY76I/AAAAAAAAAOk/oFmDm5eCFAg/s640/P2.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S58V42NRxwI/AAAAAAAAAOs/LtwnpqtWiyQ/s1600-h/P3.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/S58V42NRxwI/AAAAAAAAAOs/LtwnpqtWiyQ/s640/P3.png&quot; width=&quot;444&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/S58V89Q6CHI/AAAAAAAAAO0/hioVeB_kuXI/s1600-h/P4.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/S58V89Q6CHI/AAAAAAAAAO0/hioVeB_kuXI/s640/P4.png&quot; width=&quot;448&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58WAku9xQI/AAAAAAAAAO8/m6bzDYCBek8/s1600-h/P5.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58WAku9xQI/AAAAAAAAAO8/m6bzDYCBek8/s640/P5.png&quot; width=&quot;434&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/S58WEDUVk6I/AAAAAAAAAPE/loZ82J52Rqo/s1600-h/P6.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/S58WEDUVk6I/AAAAAAAAAPE/loZ82J52Rqo/s640/P6.png&quot; width=&quot;420&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58WajhJZwI/AAAAAAAAAPU/0vLVQtft4CE/s1600-h/P7.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58WajhJZwI/AAAAAAAAAPU/0vLVQtft4CE/s640/P7.png&quot; width=&quot;422&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S58WeULZu5I/AAAAAAAAAPc/TP32rEN6z6E/s1600-h/P8.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/S58WeULZu5I/AAAAAAAAAPc/TP32rEN6z6E/s640/P8.png&quot; width=&quot;446&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;http://photos1.blogger.com/blogger/1975/729/1600/P7.jpg&quot;&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-115129718592051330?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/Y5y4YNRkjP8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:27:56 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: Parallel Processing with Single-Thread SAS license</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-5434029642911672172</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/InxezzNxK2E/leverage-multi-core-with-single-core.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/xFnmyZXakDyZGUI3CP5XPsBe5ls/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/xFnmyZXakDyZGUI3CP5XPsBe5ls/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/xFnmyZXakDyZGUI3CP5XPsBe5ls/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/xFnmyZXakDyZGUI3CP5XPsBe5ls/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;[NESUG 22]&lt;br /&gt;
&lt;br /&gt;
SAS now support Multi-threads Multi-processor in various PROCs. To fully leverage multi-processor speedup, a server version SAS with Multi-Thread support, or SAS/MP Connect modular is necessary which is very expensive. Is there a way to get around with only SAS/Base/STAT/ETS?&lt;br /&gt;
&lt;br /&gt;
While not fully capable to utilize multi-CPUs multi threads in all jobs, the method introduced here are good for some computing-intensive tasks that are popular in modeling and anlysis, such as Bootstrapping, Cross-Validation and Simulation. These methods involve almost identical computation on multiple independent replicate samples/subsamples, thus, we can decompose them into multiple independent computation pieces.&lt;br /&gt;
&lt;br /&gt;
We present two simple bootstrapping demos here, using the data and program from SAS Documentation for PROC NLMIXED example 51.1.&lt;br /&gt;
&lt;br /&gt;
The first method used &quot;x&quot; command to execute a Batch job in DOS.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SbnlxbauF_I/AAAAAAAAABE/MAmpEUfb_LE/s1600-h/main.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5312529872796391410&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SbnlxbauF_I/AAAAAAAAABE/MAmpEUfb_LE/s400/main.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The main program will call batch jobs using &quot;x command/statement&quot; with concurrent mode where mutliple SAS jobs can access the same sas data set. In order to differentiate different pieces of the computing job, SAS automatic variable -SYSPARM is introduced to pass relavent information. Of course, the operating data sets must be stored in one or multiple permanent libraries so that it is accessible for all batch jobs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SbnmEqFLXcI/AAAAAAAAABM/qR5tnQbS9QY/s1600-h/Macro.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5312530203150081474&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SbnmEqFLXcI/AAAAAAAAABM/qR5tnQbS9QY/s400/Macro.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The macro will be executed in batch mode. Macro variables used to differentiate different jobs are passed from system automatic variable -SYSPARM. SYSJOBID can also be used for the same purpose. SAS Institute Inc. provide a comprehensive tutorial[2] on how to set up Batch Jobs and execute them in SAS, and Jackson explained how to use -SYSPARM in Batch mode [1]. Kosian, Sassoon called this method &quot;virtual multi-threading&quot; [5].&lt;br /&gt;
&lt;br /&gt;
This method, however, has a major issue, that is it is hard to control and check the status of the batch jobs. Multiple Stage jobs could easily get coding a very ugly work. &lt;br /&gt;
&lt;br /&gt;
Suppose we are going to do further analysis based on part or all of previous jobs's results, and the execution time of these jobs various, then, the main SAS program needs to wait for all these needed jobs to complete in order to continue. This Batch Execution using &quot;X&quot; command doesn't provide an easy way for current SAS session to check wether these batch jobs have been finished correctly. Note that we can't wait for them to execute sequentially. One possible method is to ask the batch jobs to write to a txt file when it is finished, and a follow up macro program in the current SAS session will use a NULL data step to check this txt file every, say, 2 minutes. This can be done via a sleep function in the NULL data step. Once all needed job finishing codes were read from this txt file, following SAS jobs can be executed.&lt;br /&gt;
&lt;br /&gt;
Obviously this is very inconvenient. Fortunately, SAS provides a unified production framework to help us complish this task [3].&lt;br /&gt;
&lt;br /&gt;
In method 2, we utilize the 'systask command' statement to execute SAS jobs. The syntax is:&lt;br /&gt;
&lt;br /&gt;
SYSTASK COMMAND &quot;operating system-command&quot;&lt;br /&gt;
WAIT | NOWAIT&lt;br /&gt;
TASKNAME=taskname&lt;br /&gt;
MNAME=name-var&lt;br /&gt;
STATUS=stat-var&lt;br /&gt;
SHELL&amp;lt;=&quot;shell-command&quot;&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
Consult with SAS Documents for detailed information.&lt;br /&gt;
&lt;br /&gt;
The most relavant options are TASKNAME and STATUS. TASKNAME specifies a name that identifies the task, which then is used with WAITFOR statement to pause the current SAS session until the tasks finished. STATUS specifies a macro variable in which you want SYSTASK to store the status of the task. A sample demo is as following:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/Sbon7enMFaI/AAAAAAAAAB8/qaBecyQnMAE/s1600-h/method2.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5312602613220119970&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/Sbon7enMFaI/AAAAAAAAAB8/qaBecyQnMAE/s400/method2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Note that this method is able to complete most of the Multi-Processor jobs that SAS/MP Connect was specifically built for, which also requires parallelized jobs be independent. Bentley [4] showed several typical production jobs that can be boosted using parallel computing, but resort to expensive SAS/MP Connect software.&lt;br /&gt;
&lt;br /&gt;
In conclusion, we showed that with a bit more coding and careful design of the job flows, we are able to utilize multi-core capability of moder computer without resort to more expensive SAS modular.&lt;br /&gt;
&lt;br /&gt;
For comparison, check the CPU usage statistics when using and not using the method proposed here.&lt;br /&gt;
=&amp;gt; Single Thread PROC NLMIXED;&lt;br /&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SbouhEnydWI/AAAAAAAAACE/cZmem9SLBuU/s1600-h/single-thread.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5312609856148108642&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SbouhEnydWI/AAAAAAAAACE/cZmem9SLBuU/s400/single-thread.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Make It Two Threads&lt;br /&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SbovD6PNk3I/AAAAAAAAACM/bJdAIBiNgUw/s1600-h/2threads.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5312610454656095090&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SbovD6PNk3I/AAAAAAAAACM/bJdAIBiNgUw/s400/2threads.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
--Ref:&lt;br /&gt;
1. Jackson, Clarence Wm., &quot;Using SAS® SYSPARM And Other Automatic System Variables&quot;, NOTSUG May 2009;&lt;br /&gt;
2. SAS Technical Notes TS-648, &quot;Examples of Batch Processing under Windows&quot;, SAS Institute Inc.&lt;br /&gt;
3. Cogswell, Denis, &quot;More Than Batch – A Production SAS® Framework&quot;, SUGI 30, Applications Development&lt;br /&gt;
4. Bentley, John E., &quot;SAS Multi-Process Connect: What, When, Where, How, and Why&quot;, SUGI 26, Systems Architecture&lt;br /&gt;
5. Kosian, Sassoon, &quot;A Generic Method of Parallel Processing in Base SAS® 8 and 9&quot;, SUGI 27, Coder's Coner&lt;br /&gt;
&lt;br /&gt;
====================================================&lt;br /&gt;
FYI:&lt;br /&gt;
Federal Government contract SAS license and renewal fee comparison between 1 PC user and multi users [Public Information]. Now, you save something nontrivial.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58SpYzmHiI/AAAAAAAAAOU/TYQtHfiH6k0/s1600-h/SAS-Pricing-Gov.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58SpYzmHiI/AAAAAAAAAOU/TYQtHfiH6k0/s640/SAS-Pricing-Gov.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-5434029642911672172?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/InxezzNxK2E&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:12:02 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: Randomly Split SAS table exactly according to a given probability vector</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-9219117087684024094</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/IzaxCw1tWGQ/randomly-split-sas-table-exactly.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/eAa5fXQrOjdzaxJTWJDt6wtni_o/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/eAa5fXQrOjdzaxJTWJDt6wtni_o/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/eAa5fXQrOjdzaxJTWJDt6wtni_o/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/eAa5fXQrOjdzaxJTWJDt6wtni_o/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SjUx5TrX-uI/AAAAAAAAAFU/mHslunP2xRw/s1600-h/P1.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5347234993176836834&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SjUx5TrX-uI/AAAAAAAAAFU/mHslunP2xRw/s400/P1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SjUxbQWRR9I/AAAAAAAAAFM/bjSAT5dM0RQ/s1600-h/P2.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5347234476886935506&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SjUxbQWRR9I/AAAAAAAAAFM/bjSAT5dM0RQ/s400/P2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SjUxawdGRnI/AAAAAAAAAFE/R_Go3v4dn6Q/s1600-h/p3.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5347234468325639794&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SjUxawdGRnI/AAAAAAAAAFE/R_Go3v4dn6Q/s400/p3.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SjUxapmgmdI/AAAAAAAAAE8/K6L_XaYgSZg/s1600-h/P4.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5347234466486065618&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SjUxapmgmdI/AAAAAAAAAE8/K6L_XaYgSZg/s400/P4.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SjUxau_OrLI/AAAAAAAAAE0/5xtI8IZ3K98/s1600-h/p5.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5347234467931925682&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SjUxau_OrLI/AAAAAAAAAE0/5xtI8IZ3K98/s400/p5.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SjUxaQq_X7I/AAAAAAAAAEs/wQebjUkdtXU/s1600-h/P6.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5347234459793973170&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SjUxaQq_X7I/AAAAAAAAAEs/wQebjUkdtXU/s400/P6.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5346986700404526946&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SjRQExBZj2I/AAAAAAAAAD0/BKwGDzc9DvE/s400/output.jpg&quot; /&gt;*K/N Algorithm based spliting given probability vector&lt;/div&gt;&lt;/div&gt;&lt;div&gt;*Ensure randomness within any level of value combination of control variables&lt;/div&gt;&lt;div&gt;*Only need to pass through data once in spliting step&lt;/div&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
/*************************************************/
%macro split(
                     seed,           /*seed for random number generator                       */
                     probvector,   /*macro variable of spliting prob vector separated by &quot;  &quot; */
                     control_vars, /*control variable as in PROC SURVEYSELECT                 */
                     in_dsn,         /*input data set                                         */
                     out_dsn=_out_dsn_, 
                     sort=nest
                     );
%let blank=%str( ); 
%let n=1; %let nv=1;
%let probs=&amp;amp;probvector;

%let dsid=%sysfunc(open(&amp;amp;in_dsn));
%if  (&amp;amp;dsid=0) %then %do;
     %put %sysfunc(sysmsg());
     %put Stop Processing due to Errors;
     %goto exit;
%end;
%else %do;
    %let nobs=%sysfunc(attrn(&amp;amp;dsid, NLOBS));
    %let dsid=%sysfunc(close(&amp;amp;dsid));    
%end;

%if &amp;amp;out_dsn=&amp;amp;blank %then %let &amp;amp;out_dsn=&amp;amp;in_dsn;
%if &amp;amp;seed=&amp;amp;blank %then %let seed=0;

%let pos=%scan(&amp;amp;probs,&amp;amp;n,&amp;amp;blank); 
%do %while(&amp;amp;pos ne &amp;amp;blank); 
    %let n=%eval(&amp;amp;n+1); 
    %let pos=%scan(&amp;amp;probs,&amp;amp;n,&amp;amp;blank); 
%end;
%let n=%eval(&amp;amp;n-1);

%let pos=%scan(&amp;amp;control_vars,&amp;amp;nv,&amp;amp;blank);
%let control_vars_x=&amp;amp;pos;
%let control_key=%str(&amp;amp;pos);
%let control_find=%str(key:&amp;amp;pos); 
%do %while(&amp;amp;pos ne &amp;amp;blank); 
    %put &amp;amp;pos;
    %let nv=%eval(&amp;amp;nv+1); 
    %let pos=%scan(&amp;amp;control_vars,&amp;amp;nv,&amp;amp;blank); 
    %if &amp;amp;pos^=&amp;amp;blank %then %do;
        %let control_vars_x=%str(&amp;amp;control_vars_x * &amp;amp;pos);
        %let control_key=%str(&amp;amp;pos%&quot;, %&quot;&amp;amp;control_key);
        %let control_find=%str(key:&amp;amp;pos, &amp;amp;control_find);    
    %end;
%end;
%let nv=%eval(&amp;amp;nv-1);
%put nv=&amp;amp;nv;
%if %eval(&amp;amp;nv&amp;gt;0) %then %do;
    %if %upcase(&amp;amp;sort)=NEST %then %do;
        proc sort data=&amp;amp;in_dsn out=_in_dsn_; 
             by &amp;amp;control_vars; 
        run;
    %end;
    %else %if %upcase(&amp;amp;sort)=SERP %then %do;
          ods select none;
          proc surveyselect data=&amp;amp;in_dsn samprate=1.0 out=_in_dsn_
                            sort=&amp;amp;sort  method=sys;
               control  &amp;amp;control_vars;
          run;
          ods select all;
    %end;
    %else %do;
         %put Specify only NEST or SERP for sort statement;
         %goto exit;
    %end;
    %let in_dsn=_in_dsn_;

    proc freq data=_in_dsn_ noprint;
         tables &amp;amp;control_vars_x /missing out=_freq_;
    run;

    proc sql noprint; 
           select name into :keyvars separated by '  '    
           from  sashelp.vcolumn
           where libname='WORK' &amp;amp; 
                     upcase(memname)='_FREQ_' &amp;amp; 
                     name not in ('COUNT', 'PERCENT')
           ;
    quit;
    data  _freq_(index=(idx=(&amp;amp;keyvars)));
            set _freq_  nobs=ntotal  end=eof;
            _index_=_n_;
            if eof then call symput('ncomb', ntotal);
    run;
    %let withcontrol=1;

%end;
%else %do;
    %let withcontrol=0;
    %let ncomb=1;
%end;

proc sql noprint;
       select name into :originalvars separated by ' '
       from  sashelp.vcolumn
       where libname='WORK' &amp;amp; 
                     upcase(memname)='_IN_DSN_'
      ;
quit;

data probs;
     %do i=1 %to &amp;amp;n;
         _prob_&amp;amp;i=%scan(&amp;amp;probs, &amp;amp;i, &amp;amp;blank);
     %end;        
     output;
     drop i;
run; 

%let i=&amp;amp;n;
%put Initial counts: n=&amp;amp;n  i=&amp;amp;i   ncomb=&amp;amp;ncomb;
data &amp;amp;out_dsn      _N;
     array _P{*}  _prob_1-_prob_&amp;amp;n;
     array _N{0:%eval(&amp;amp;n+1)}  N_0-N_%eval(&amp;amp;n+1);
     array _Pmat{1:&amp;amp;ncomb, 1:&amp;amp;n} _temporary_;     
     array _Fmat{1:&amp;amp;ncomb, 1:&amp;amp;n} _temporary_;
     array _Xmat{1:&amp;amp;ncomb, 1:&amp;amp;n} _temporary_;
     array _Kmat{1:&amp;amp;ncomb, 1:&amp;amp;n} _temporary_;
     array _Nmat{1:&amp;amp;ncomb, 0:%eval(&amp;amp;n+1)} _temporary_;    

     if _n_=1 then do;
        set probs;        
        do i=1 to &amp;amp;ncomb;
           do j=1 to &amp;amp;n;
              _Pmat[i, j]=_P[j];
              if j=1 then _Fmat[i, j]=_P[j];
              else _Fmat[i, j]=_Fmat[i, j-1]+_P[j];
           end;
           do j=1 to &amp;amp;n;
              _Fmat[i, j]=_Fmat[i, j]/_Fmat[i, &amp;amp;n];
           end;
        end;
        put 'FINISH LOADING PROB VECTORS';
        %if &amp;amp;withcontrol=1 %then %do;            
            do while (^eof);
               set  _freq_  end=eof;              
               cn=0; 
               _Nmat[_index_, 0]=COUNT; _Nmat[_index_, %eval(&amp;amp;n+1)]=0;   
               do j=1 to &amp;amp;n;
                  if j&amp;lt;&amp;amp;n then do;
                     _Nmat[_index_, j]=round(_P[j]*COUNT, 1);
                     cn+_Nmat[_index_, j];
                  end;
                  else _Nmat[_index_, j]=COUNT-cn;
                  _Xmat[_index_, j]=_Nmat[_index_, j];
                  _Kmat[_index_, j]=0;
               end;               
            end;
        %end;    
        %else %do;
            _index_=1; cn=0;
            do j=1 to &amp;amp;n;
               if j&amp;lt;&amp;amp;n then do;
                  _Nmat[_index_, j]=round(_P[j]*&amp;amp;nobs, 1);
                  cn+_Nmat[_index_, j];
               end;
               else _Nmat[_index_, j]=&amp;amp;nobs-cn;
               _Xmat[_index_, j]=_Nmat[_index_, j];
               _Kmat[_index_, j]=0;
            end;
        %end;
        put 'FINISH LOADING ALL DATA SETS';
        do i=1 to &amp;amp;ncomb;
            do k=0 to %eval(&amp;amp;n+1);               
                _N[k]=_Nmat[i, k]; put _Nmat[i, k]=;
            end;
            output _N;
        end;
     end;
     set &amp;amp;in_dsn  nobs=ntotal   end=eof_in;

     r=ranuni(&amp;amp;seed);
     %if &amp;amp;withcontrol=1 %then %do;
        do until (_iorc_=%sysrc(_dsenom));
            set _freq_  key=idx;
            if _iorc_^=%sysrc(_sok) then  _error_=0;        
        end;        
     %end;
     %else %do;
         _index_=1;
     %end;
     notfound=1;  j=1;

     do j=1 to &amp;amp;n;
         if notfound then do;
               if r&amp;lt;=_Fmat[_index_, j] &amp;amp; _Kmat[_index_, j]&amp;lt;_Nmat[_index_,j] then do;
                    _BLOCK=j; notfound=0; _Kmat[_index_, _BLOCK]+1; 
               end;
        end;        
     end;
     if notfound then do;  _BLOCK=&amp;amp;n; notfound=0; _Kmat[_index_, _BLOCK]+1; end;

     _Xmat[_index_, _BLOCK]=_Nmat[_index_, _BLOCK]-_Kmat[_index_, _BLOCK];
     _Nmat[_index_, %eval(&amp;amp;n+1)]+1; 

     if ^(eof_in ) then do;
        _temp_=(_Nmat[_index_, 0]-_Nmat[_index_, %eval(&amp;amp;n+1)]);
        if _temp_&amp;lt;=0 then _Pmat[_index_, _BLOCK]=0;
        else  _Pmat[_index_, _BLOCK]=_Xmat[_index_, _BLOCK]/_temp_;               
        do j=1 to &amp;amp;n;
           if j=1 then _Fmat[_index_, j]=_Pmat[_index_, j];
           else _Fmat[_index_, j]=_Fmat[_index_, j-1]+_Pmat[_index_, j];  
        end;
        do j=1 to &amp;amp;n;   
            if _Fmat[_index_, &amp;amp;n]&amp;lt;=0 then _Fmat[_index_, j]=0;
            else _Fmat[_index_, j]=_Fmat[_index_, j]/_Fmat[_index_, &amp;amp;n]; 
        end;
     end;
     else if (eof_in) then do;
        do i=1 to &amp;amp;ncomb;
            do k=1 to %eval(&amp;amp;n);               
                _N[k]=_Kmat[i, k]; put _Kmat[i, k]=;
            end;
            output _N;
        end;
     end;
     keep &amp;amp;originalvars  _BLOCK;
     output &amp;amp;out_dsn;
run;

%exit:
%mend;


*options mprint mlogic;
%put START TIME 1: %sysfunc(datetime(),datetime20.);

data test0;
     do ID=1 to 796773;        
        TDSP=min(3, round(ranuni(8976)*4));
        if ranuni(93745)&amp;lt;0.3 then VS='H'; else VS='M';
        output;
     end;
run;
%put START TIME 2: %sysfunc(datetime(),datetime20.);

%let seed=99999;
%let probvector=0.1485905 0.1485905 0.2324283 0.2351954 0.2351954;
%let control_vars=TDSP  VS;
%let in_dsn=test0;
%let out_dsn=test_out;
%let sort=NEST;
%split(&amp;amp;seed, &amp;amp;probvector, &amp;amp;control_vars, &amp;amp;in_dsn, out_dsn=&amp;amp;out_dsn);
*options nomprint nomlogic;
%put END TIME: %sysfunc(datetime(),datetime20.);

;;

proc freq data=&amp;amp;out_dsn noprint;
        tables _BLOCK*TDSP*VS /missing out=_freq_out_;
run;

&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-9219117087684024094?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/IzaxCw1tWGQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:02:56 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: SVD Filtered Temporal Usage Pattern Analysis and Clustering</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-6140442779930433434</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/1zTGPL5QsKQ/svd-filtered-temporal-usage-pattern.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/EQzY2CmwADnEusF6D6DLr_xQTMk/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/EQzY2CmwADnEusF6D6DLr_xQTMk/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/EQzY2CmwADnEusF6D6DLr_xQTMk/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/EQzY2CmwADnEusF6D6DLr_xQTMk/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58QmODvFvI/AAAAAAAAAOM/0WFrgMs7NSo/s1600-h/P1.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S58QmODvFvI/AAAAAAAAAOM/0WFrgMs7NSo/s400/P1.jpg&quot; width=&quot;397&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SqQ_5KXPOpI/AAAAAAAAAIQ/ja80zf7zz5w/s1600-h/P2.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;640&quot; id=&quot;BLOGGER_PHOTO_ID_5378494106254129810&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SqQ_5KXPOpI/AAAAAAAAAIQ/ja80zf7zz5w/s640/P2.jpg&quot; width=&quot;632&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SqQ_4zwQcrI/AAAAAAAAAII/UB02lVHbPyQ/s1600-h/P3.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378494100185051826&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SqQ_4zwQcrI/AAAAAAAAAII/UB02lVHbPyQ/s400/P3.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SqQ_4ehkyEI/AAAAAAAAAIA/XNb5NhJBNc8/s1600-h/P4.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378494094486325314&quot; src=&quot;http://4.bp.blogspot.com/_slrAR0IXTL0/SqQ_4ehkyEI/AAAAAAAAAIA/XNb5NhJBNc8/s400/P4.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SqQ_3snljkI/AAAAAAAAAH4/4clXEpbufWE/s1600-h/P5.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378494081089769026&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SqQ_3snljkI/AAAAAAAAAH4/4clXEpbufWE/s400/P5.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SqQ_h1B7f1I/AAAAAAAAAHw/ByqpMfNfNxY/s1600-h/P6.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378493705390620498&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SqQ_h1B7f1I/AAAAAAAAAHw/ByqpMfNfNxY/s400/P6.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SqQ_hnfSCDI/AAAAAAAAAHo/F2rBbvtdkW0/s1600-h/P7.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378493701755635762&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SqQ_hnfSCDI/AAAAAAAAAHo/F2rBbvtdkW0/s400/P7.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SqQ_hMraiVI/AAAAAAAAAHg/0nBlbuCHavc/s1600-h/P8.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378493694558767442&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SqQ_hMraiVI/AAAAAAAAAHg/0nBlbuCHavc/s400/P8.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SqQ_gp1ya-I/AAAAAAAAAHY/t0189Jc2k4s/s1600-h/P9.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378493685207034850&quot; src=&quot;http://3.bp.blogspot.com/_slrAR0IXTL0/SqQ_gp1ya-I/AAAAAAAAAHY/t0189Jc2k4s/s400/P9.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SqQ_f_dnWlI/AAAAAAAAAHQ/bzbo_eAJ_j8/s1600-h/P10.jpg&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5378493673831357010&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SqQ_f_dnWlI/AAAAAAAAAHQ/bzbo_eAJ_j8/s400/P10.jpg&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-6140442779930433434?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/1zTGPL5QsKQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 16 Mar 2010 01:01:58 +0000</pubDate>
</item>
<item>
	<title>Jared Prins' Blog: Impressed with SAS Text Miner Help Files</title>
	<guid>http://jaredprins.squarespace.com/blog/2010/3/15/impressed-with-sas-text-miner-help-files.html</guid>
	<link>http://jaredprins.squarespace.com/blog/2010/3/15/impressed-with-sas-text-miner-help-files.html</link>
	<description>&lt;p&gt;As a tech junkie, people in the office often come by to ask for help with various software.&amp;nbsp; As this is not a part of my job description and I have deadlines to meet, sometimes my response is &quot;Press F1&quot;.&amp;nbsp; Of course, this will usually open the help file for that software.&lt;/p&gt;
&lt;p&gt;Two weeks ago I upgraded SAS Enterprise Miner to 6.1 and SAS Text Miner to 4.2.&amp;nbsp; Although painful to upgrade, it was worth it.&amp;nbsp; The new TM has all new TM nodes and both products seem much more polished.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After spending all this time getting familiar with the old TM, I now needed to learn new TM functionality.&amp;nbsp; I began to look for documentation since all of my books and training manuals were now partially out of date.&amp;nbsp; I turned to the web which had virtually no helpful TM 4.2 documentation, I'm guessing because TM 4.2 is too new?&amp;nbsp; (Or perhaps yours truly was googling with poor search terms).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Not sure where to turn, I walked over to the boss's office.&amp;nbsp; That's when I got a taste of my own medicine. &quot;Press F1&quot;, he said.&lt;/p&gt;
&lt;p&gt;Of all the help files I've ever seen, SAS help files are the most impressive.&amp;nbsp; There's about a hundred pages of in-depth descriptions for the new nodes plus examples of the TM process.&amp;nbsp; Whoever at SAS writes these help files - Thank you, thank you, thank you!&lt;/p&gt;</description>
	<pubDate>Mon, 15 Mar 2010 15:58:27 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: Multiple identities: for all of the people you are</title>
	<guid>http://blogs.sas.com/sasdummy/index.php?/archives/158-guid.html</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/eSFphjYUmSc/index.php</link>
	<description>When you connect to a SAS environment with SAS Enterprise Guide, are you a single, consistent person?  Or do you have more identities than &lt;a href=&quot;http://en.wikipedia.org/wiki/Fletch_(film)&quot; title=&quot;Fletch lives!&quot;&gt;Chevy Chase in Fletch&lt;/a&gt;?&lt;br /&gt;
&lt;br /&gt;
When you connect to a SAS environment, you can be many people at once:&lt;ul&gt;&lt;li&gt;You are logged into your Windows account on your PC&lt;br /&gt;
&lt;li&gt;You connect to SAS metadata using a metadata identity&lt;br /&gt;
&lt;li&gt;You connect to a SAS workspace session with a host identity on the workspace server.&lt;br /&gt;
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;If you have a &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/bisecag/61133/HTML/default/a003258755.htm&quot; title=&quot;about SSO and SAS&quot;&gt;single sign-on configuration&lt;/a&gt;, then your identity should be the same across the board.  But if not, the accounts used in the various tiers might be different.  Here is a simple SAS program that can help you to answer the deep philosophical question: Who am I?&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
/** for use on Windows and Unix workspace servers **/&lt;br /&gt;
%let _metauser = %scan(%sysget(METAUSER),1,'@');&lt;br /&gt;
/** for use on MVS, Stored Process, and Pooled Workspace servers **/&lt;br /&gt;
/** %let _metauser = %scan(%sysfunc(getoption(METAUSER)),1,'@'); **/&lt;br /&gt;
data ids;&lt;br /&gt;
&amp;#160;&amp;#160;length name $ 16 purpose $ 40;&lt;br /&gt;
&amp;#160;&amp;#160;label name=&quot;Value Name&quot; purpose=&quot;Purpose&quot;;&lt;br /&gt;
&amp;#160;&amp;#160;infile datalines dsd;&lt;br /&gt;
&amp;#160;&amp;#160;input name purpose;&lt;br /&gt;
&amp;#160;&amp;#160;datalines;&lt;br /&gt;
SYSUSERID, SAS session host account&lt;br /&gt;
_CLIENTUSERID, Windows user ID in SAS EG&lt;br /&gt;
_CLIENTUSERNAME, Windows user name in SAS EG&lt;br /&gt;
_METAUSER, SAS metadata user ID&lt;br /&gt;
run;&lt;br /&gt;
&lt;br /&gt;
proc sql;&lt;br /&gt;
&amp;#160;&amp;#160;select t1.name, &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;t2.value, &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;t1.purpose&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;from work.ids t1 &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;inner join sashelp.vmacro t2 on (t1.name = t2.name);&lt;br /&gt;
quit;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
When you run this program in SAS Enterprise Guide, you'll produce a simple report that shows all of the IDs that make you the special &quot;you&quot; that you are to SAS. 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/eSFphjYUmSc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 15 Mar 2010 13:18:41 +0000</pubDate>
</item>
<item>
	<title>The Princess of Science: ‫יום פיי שמח!‬</title>
	<guid>http://www.sci-princess.info/?p=1051</guid>
	<link>http://feedproxy.google.com/~r/sci-princess/~3/3IzTkdBMVCc/1051</link>
	<description>&amp;#8235;המתמטיקאים בעולם חוגגים היום את יום הפיי. פיי הוא קבוע מתמטי שודאי שמעתם עליו, וערכו שווה בקירוב ל-3.14.בשיטה הנהוגה בארה&quot;ב, התאריך של היום, ה-14 במרץ, נכתב כך: 3.14, ומכאן מקור המנהג.
בגוגל מציינים את היום על ידי לוגו מיוחד (שהוא התירוץ לכל הפוסט הזה):







ואם כבר כתבתי פוסט, אז הנה חידון פיי שכתבתי פעם כאשר ניהלתי את [...]&amp;#8236;</description>
	<pubDate>Sun, 14 Mar 2010 13:05:35 +0000</pubDate>
</item>
<item>
	<title>StudySAS Blog: PRXMATCH Function | StudySAS Blog [Digg]</title>
	<guid>http://digg.com/programming/PRXMATCH_Function_StudySAS_Blog</guid>
	<link>http://feedproxy.google.com/~r/sastips/~3/rcG0_h5IjQ0/PRXMATCH_Function_StudySAS_Blog</link>
	<description>Prxmatch () function is very useful in locating the matching strings. P rxmatch() function has 2 parameters, the first parameter is the regular expression ID (i.e what you are looking in a string for a match) and the second parameter is the character string to be searched.&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/rcG0_h5IjQ0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sat, 13 Mar 2010 03:14:56 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: "SAS Talks" is home</title>
	<guid>http://blogs.sas.com/sasdummy/index.php?/archives/157-guid.html</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/JYkLOjIVqM4/index.php</link>
	<description>The &lt;a href=&quot;http://blogs.sas.com/sasdummy/index.php?/archives/141-SAS-Talks-You-listening.html&quot; title=&quot;I've talked about SAS Talks before&quot;&gt;SAS Talks series&lt;/a&gt; is a big hit, and now &lt;a href=&quot;http://support.sas.com/community/events/sastalks/&quot; title=&quot;SAS Talks home&quot;&gt;we've got a landing page&lt;/a&gt; where you can find previously recorded talks, plus information about upcoming talks.&lt;br /&gt;
&lt;br /&gt;
You can learn about &lt;a href=&quot;http://www.sas.com/reg/gen/corp/858824&quot; title=&quot;I talk!&quot;&gt;SAS programming with SAS Enterprise Guide&lt;/a&gt;, &lt;a href=&quot;http://www.sas.com/reg/gen/corp/794974&quot; title=&quot;Bob talks!&quot;&gt;ODS statistical graphics&lt;/a&gt;, &lt;a href=&quot;http://www.sas.com/reg/gen/corp/867226&quot; title=&quot;Vince talks!&quot;&gt;fancy multi-sheet output for Microsoft Excel from SAS&lt;/a&gt;, and more!&lt;br /&gt;
&lt;br /&gt;
They're free and available on-demand! 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/JYkLOjIVqM4&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 12 Mar 2010 15:24:17 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: A Hot Time at Pittcon</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/292-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/292-A-Hot-Time-at-Pittcon.html</link>
	<description>Until last week, it had been a while since I've been to a trade show.&lt;br /&gt;
&lt;br /&gt;
My colleague and favorite chemist, Lou Valente, asked me to join him in the JMP booth at &lt;a href=&quot;http://www.pittcon.org/&quot; title=&quot;The Pittsburgh Conference&quot;&gt;Pittcon&lt;/a&gt;, the Pittsburgh Conference. &lt;br /&gt;
&lt;br /&gt;
The Pittsburgh Conference is a huge event with 20,000+ chemists and other laboratory scientists sharing ideas and best practices. The expo floor is filled with lab instrument and equipment manufacturers and others, like us -- software developers. This year, the Pittsburgh Conference was in Orlando, FL. (I guess would-be scientists don't have to take much geography.)&lt;br /&gt;
&lt;br /&gt;
Our booth was directly across the aisle from &lt;a href=&quot;http://www.control3.com/&quot; title=&quot;Control Company&quot;&gt;Control Company&lt;/a&gt;. They design, manufacture and sell traceable laboratory equipment and scientific instruments -- things like thermometers, anemometers, calipers and even clocks.&lt;br /&gt;
&lt;br /&gt;
I didn't know what &quot;traceable&quot; meant in this context, but they provide a certificate that can trace the calibration of instruments back to National Institute of Standards and Technology. Pretty cool.&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;528&quot; height=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/ControlCompanyBooth1.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Here's a picture of one part of their booth. Notice the lights across the top. They had a 10x30 foot booth with about 40 of the halogen lights you see at the top of the booth panels. That meant that their booth, and because of the proximity, our booth, was pretty warm.&lt;br /&gt;
&lt;br /&gt;
Check out this close-up of some thermometers they had on display. Those temperatures are in Celsius. To save you the trouble of converting it for yourself, I'll point out that the 37 degrees Celsius shown on the top row of thermometers is 98.6 degrees Fahrenheit. And, while that's a normal temperature inside the human body, it's a little warm for a trade show floor. On the first day of the show, we saw that top row of thermometers reach 40 degrees (104 Fahrenheit!).&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;400&quot; height=&quot;528&quot; src=&quot;http://blogs.sas.com/jmp/uploads/ControlCompanyBooth2.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
So, on the second day of the show, we started logging the temperatures of the top row and bottom row of the thermometers shown in the picture above. Here are those three days in &lt;a href=&quot;http://www.jmp.com/software/jmp8/&quot;&gt;Graph Builder in JMP&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;750&quot; height=&quot;382&quot; src=&quot;http://blogs.sas.com/jmp/uploads/ControlCompanyTempsGraphBuilder.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
You can see that on Days 3 and 4 of the show, we started collecting data before they turned the lights on. They heat up pretty quick. On Day 4, the show ended at 2:00 p.m., so we didn't get any data after that.&lt;br /&gt;
&lt;br /&gt;
I'm not sure why the curve for Day 2 of the show is different from the other two days. They probably had the air conditioning on that day and not the other two since it was cooler outside those days. Regardless, we had fun using this to show how quickly we could take the data and create an interesting look at it.&lt;br /&gt;</description>
	<pubDate>Thu, 11 Mar 2010 23:00:10 +0000</pubDate>
</item>
<item>
	<title>the SAS-BI blog: Developing Custom OLAP Cube Aggregations</title>
	<guid>tag:blogger.com,1999:blog-15946403.post-2010191830624677839</guid>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/XWl1pVHLwSw/developing-custom-olap-cube.html</link>
	<description>&lt;strong&gt;Business problem&lt;/strong&gt;: By default, OLAP cubes calculate aggregations at each possible intersection of levels in one or more dimensions. However, there are situations where aggregations cannot be completed on the fly for all intersections within the cube due to business rules for some data levels. Also, the source data table isn't a fully summarized table (which fits nicely into the OLAP Studio GUIs) and derived measures are not possible due to specific business rules.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Within the PROC OLAP code, you can specifically assign an individual table for each Aggregation. This option is defined in the online help at: &lt;br /&gt;
&lt;a href=&quot;http://support.sas.com/documentation/cdl/en/olapug/59574/HTML/default/a002605627.htm&quot;&gt;http://support.sas.com/documentation/cdl/en/olapug/59574/HTML/default/a002605627.htm&lt;/a&gt; &lt;br /&gt;
It is important to note that the individual aggregated tables must have columns that completely match those listed in the aggregation step &amp;amp; this table must have at least one column defined in the MEASURE AGGR_COLUMN= statement.&lt;br /&gt;
&lt;em&gt;Contributed by:&lt;/em&gt;&lt;br /&gt;
J. Alan Stark of Ashlind Consulting&lt;br /&gt;
&lt;a href=&quot;http://www.ashlind.com/&quot;&gt;http://www.ashlind.com/&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/15946403-2010191830624677839?l=sas-bi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RealBusinessIntelligenceForRealUsers/~4/XWl1pVHLwSw&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 11 Mar 2010 09:00:08 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: Visual Data Quality with Named Colors in JMP, Part 2</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/285-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/285-Visual-Data-Quality-with-Named-Colors-in-JMP,-Part-2.html</link>
	<description>After &lt;a href=&quot;http://blogs.sas.com/jmp/index.php?/archives/284-Visual-Data-Quality-with-Named-Colors-in-JMP.html&quot;&gt;my previous exploration of colors and names&lt;/a&gt; revealed inconsistencies in the Wikipedia color data, I looked around for a more authoritative source of color names. No luck finding an oracle, but I did find another interesting data set. &lt;br /&gt;
&lt;br /&gt;
Where the Wikipedia table provided color values for a given set of names, this data set provides names for given color values. &lt;a href=&quot;http://blog.crowdflower.com/2008/03/our-color-names-data-set-is-online/&quot; title=&quot;Blog&quot;&gt;Dolores Labs&lt;/a&gt; created a &lt;a href=&quot;https://www.mturk.com/mturk/welcome&quot;&gt;Mechanical Turk&lt;/a&gt; task to have people give names to the color swatches they were assigned to. The results are provided in a &lt;a href=&quot;http://en.wikipedia.org/wiki/Comma-separated_values&quot; title=&quot;Wikipedia&quot;&gt;CSV&lt;/a&gt; file, which JMP opens without any trouble at all.&lt;br /&gt;
&lt;br /&gt;
As you might expect, there are lots of duplicate names. Out of about 10,000 color values, 1,000 were assigned the name &quot;blue.&quot; Conversely, sometimes the same color value would be assigned different names, such as &quot;purple&quot; and &quot;violet.&quot; And since the names were entered by the workers, instead of picked from a list, there is some variation in spelling. Column Recode is really handy for fixing up some of these problems. Here is a subset of the names after applying &lt;em&gt;Trim Whitespace&lt;/em&gt; and &lt;em&gt;Title Case&lt;/em&gt; in &lt;em&gt;Col : Recode&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;serendipity_imageComment_center&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img width=&quot;400&quot; height=&quot;289&quot; src=&quot;http://blogs.sas.com/jmp/uploads/RecodeColorNames.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Color names before and after&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I also used &lt;em&gt;Find and Replace&lt;/em&gt; to change &quot;Drk&quot; to &quot;Dark&quot; and other abbreviations. That still left about 1,500 unique names, most of them occurring once. I wanted to see how much variation there was in colors of the same name, so I first filtered out the names with fewer than 15 color values. To do that, I used Summarize on the color name column, which told me how many colors had each name. Then I could sort the table by the counts and select the rows with fewer than 15 colors. Since the tables are linked, that also selects those in the original table. After excluding those, I plotted the remaining in Graph Builder as Hue by Name.&lt;br /&gt;
&lt;br /&gt;
The graph is long, so I'll leave it to the end, but if you look closely (click the graph to see it full size), you might notice things like a purple called green and a green called blue. The names are ordered by average hue, which sometimes doesn't work too well for the reds, which often legitimately straddle the edge between 0&amp;deg; and 360&amp;deg;. So this is another example where a visualization helps detect data quality issues.&lt;br /&gt;
&lt;br /&gt;
&lt;a class=&quot;serendipity_image_link&quot; href=&quot;http://blogs.sas.com/jmp/uploads/NameXHue.png&quot;&gt;&lt;img width=&quot;367&quot; height=&quot;818&quot; src=&quot;http://blogs.sas.com/jmp/uploads/NameXHueSmall.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</description>
	<pubDate>Wed, 10 Mar 2010 18:29:00 +0000</pubDate>
</item>
<item>
	<title>StudySAS Blog: $UPCASEw. format</title>
	<guid>tag:blogger.com,1999:blog-2315822260943695633.post-4140632547986664891</guid>
	<link>http://feedproxy.google.com/~r/sastips/~3/R9120V9ut_Q/upcasew-format.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/abgArjsOxraDTshWYw31E8xZ1xg/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/abgArjsOxraDTshWYw31E8xZ1xg/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/abgArjsOxraDTshWYw31E8xZ1xg/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/abgArjsOxraDTshWYw31E8xZ1xg/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;We all know the importance of UPCASE function in handling the character case strings. But do you know that a format can let you do the same as the UPCASE function (upcasing the variables).$UPCASEw. format works similar to the UPCASE Function. It also does one more thing which UPCASE function doesn’t. i.e: $UPCASEw. format let you apply length to the variable.

Remember that w specifies the width of the output field.

Example:*********************************************************;

data new;*convert it to uppercase;name=&quot;studysas blog&quot;; format name $upcase.;newname=put(name, $upcase32.);*Put function let you apply $upcase format;run;**********************************************;

*The length of the new variable newname will be 32. 

&lt;br /&gt;
&lt;br /&gt;
[[ This is a content summary only. Visit my website for full links, other content, and more! ]]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=R9120V9ut_Q:V97X2ky2Lbg:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=R9120V9ut_Q:V97X2ky2Lbg:63t7Ie-LG7Y&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=63t7Ie-LG7Y&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=R9120V9ut_Q:V97X2ky2Lbg:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?i=R9120V9ut_Q:V97X2ky2Lbg:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=R9120V9ut_Q:V97X2ky2Lbg:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?i=R9120V9ut_Q:V97X2ky2Lbg:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=R9120V9ut_Q:V97X2ky2Lbg:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/sastips?a=R9120V9ut_Q:V97X2ky2Lbg:dnMXMwOfBR0&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/sastips?d=dnMXMwOfBR0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/R9120V9ut_Q&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 10 Mar 2010 17:37:36 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: Changing JMP Graph and Selected Text Colors (for Windows OS)</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/291-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/291-Changing-JMP-Graph-and-Selected-Text-Colors-for-Windows-OS.html</link>
	<description>At Sam Gardner’s March 4 Webcast on JMP Journals, we closed with a few basic unanswered questions about changing color settings in JMP for Windows.  I promised the answers.&lt;br /&gt;
&lt;br /&gt;
1.  You can change most graph settings globally from JMP Preferences.  For example, to change most graph attributes, including background color, marker size, marker style and color schemes, choose PREFERENCES&gt;REPORTS, then make and apply your changes.  &lt;br /&gt;
 &lt;br /&gt;
&lt;img src=&quot;http://blogs.sas.com/jmp/uploads/Reports.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
2.  To change the background color of tables, choose PREFERENCES&gt; WINDOWS SPECIFIC&gt;WINDOWS BACKGROUND COLOR.&lt;br /&gt;
&lt;br /&gt;
3.  To change the color used to highlight selected menu options or table rows that correspond to areas of a graph that you highlight, you need to change a Windows setting.   NOTE: Because these settings will apply to all Windows programs, you may want to note the defaults before changing.&lt;br /&gt;
&lt;br /&gt;
From your Windows Settings Control Panel, select DISPLAY&gt;APPEARANCE&gt;ADVANCED.  From the ITEMS box, chooses SELECTED ITEMS, and then choose your color.  You may also need to change the FONT color.  For example, yellow highlight was unreadable with my default white font, so I changed FONT color to black.&lt;br /&gt;
 &lt;br /&gt;
&lt;img src=&quot;http://blogs.sas.com/jmp/uploads/Advanced.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Looking for other tips?  Try our searchable &lt;a href=&quot;http://www.jmp.com/support/knowledge_base.shtml&quot;&gt; JMP Knowledge Base &amp;amp; FAQs.&lt;/a&gt;  &lt;br /&gt;</description>
	<pubDate>Tue, 09 Mar 2010 14:00:00 +0000</pubDate>
</item>
<item>
	<title>the SAS-BI blog: Alert Notification from BI Dashboard 4.2? Include EMAIL Addresses in User Manager</title>
	<guid>tag:blogger.com,1999:blog-15946403.post-4724139625345383283</guid>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/52WvS42CgfQ/alert-notification-from-bi-dashboard-42.html</link>
	<description>If you would like for the BI Dashboard to send you an alert via email, you must ensure that the email address is included for each user that will be receiving emails. This is located&amp;nbsp;in SAS Management Console User Manager.&lt;br /&gt;
&lt;br /&gt;
Instructions: &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/biwaag/63059/HTML/default/a003311779.htm&quot;&gt;http://support.sas.com/documentation/cdl/en/biwaag/63059/HTML/default/a003311779.htm&lt;/a&gt;&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_huF4aTxC8y8/S4geX4JEuKI/AAAAAAAABkI/QaUPFdK-BJY/s1600-h/mgmt+console+-+user+-+email+example.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/_huF4aTxC8y8/S4geX4JEuKI/AAAAAAAABkI/QaUPFdK-BJY/s320/mgmt+console+-+user+-+email+example.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/15946403-4724139625345383283?l=sas-bi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RealBusinessIntelligenceForRealUsers/~4/52WvS42CgfQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 08 Mar 2010 09:00:02 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: Just testing!</title>
	<guid>http://blogs.sas.com/sasdummy/index.php?/archives/156-guid.html</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/1Zue92hBldQ/index.php</link>
	<description>Yesterday, we at SAS performed a little experiment, unintentionally.  Who would notice (we wondered in retrospect) if we disabled one of our &lt;a href=&quot;http://support.sas.com/forums/index.jspa?categoryID=1&quot; title=&quot;Discussion forums&quot;&gt;discussion forums&lt;/a&gt; on &lt;a href=&quot;http://support.sas.com&quot; title=&quot;SAS Support&quot;&gt;support.sas.com&lt;/a&gt;?&lt;br /&gt;
&lt;br /&gt;
As we learned: a lot of people would notice.&lt;br /&gt;
&lt;br /&gt;
There was a technical glitch that broke the &lt;a href=&quot;http://support.sas.com/forums/forum.jspa?forumID=10&quot; title=&quot;EG discussion forum&quot;&gt;SAS Enterprise Guide discussion forum&lt;/a&gt; for much of the day yesterday.  All of the other discussion forums (and &lt;a href=&quot;http://support.sas.com/forums/index.jspa?categoryID=1&quot; title=&quot;Lots of discussion topics&quot;&gt;there are a bunch&lt;/a&gt;) were unaffected.  But it warmed my heart to hear that so many people missed discussing SAS Enterprise Guide topics with their fellow users.&lt;br /&gt;
&lt;br /&gt;
Thanks for participating in the forums.  And thanks for letting us know that you missed us during the brief outage.   
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/1Zue92hBldQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 05 Mar 2010 15:57:43 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: Quick Reference Card</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/290-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/290-Quick-Reference-Card.html</link>
	<description>Do you love keyboard shortcuts as much as I do?  If so, be sure to check out the Quick Reference Card (found in JMP by going to the Help menu and selecting Books -&gt; Quick Reference Card).  It is a PDF of the keyboard shortcuts available in JMP, broken down by the operating system (Windows, Macintosh, or Linux).  Many of them will be familiar to you because they are common keyboard shortcuts for the applicable operating system, but a number of them are unique to JMP.  For example, did you know you can increase the font size by holding down the CTRL and SHIFT keys and then pressing the plus sign?  Similarly, pressing the minus sign will decrease your font size.  Also, did you know you can hold down the ALT key and press the first letter of a menu title to open that menu?  The only exception is the Tools menu, which requires ALT+O.  As another example, you can also move your current window to the back with CTRL+B.   Do you need to create a new data table?  CTRL+N.  Do you need to show the log window?  CTRL+SHIFT+L. Do you want to add the current report to a journal?  CTRL+J.  The list goes on and on…&lt;br /&gt;
	&lt;br /&gt;
In addition to keyboard shortcuts, the Quick Reference Card also features common clicks and special functions.  Examples of some common clicks include holding the CTRL key down while resizing a graph so that you can resize all similar graphs the same way and right-clicking on a selected cell in a data table and selecting Fill to repeat values or a sequence of values in a column.  Examples of special functions include how to check that fences match in a script (place the cursor to the left of an opening fence or to the right of a closing fence and both fences will highlight if a match is found) and how to select multiple analysis options from a red triangle menu (hold the ALT key down before clicking the red triangle).&lt;br /&gt;
	&lt;br /&gt;
Finally, you can find a detailed description of the options in the Formula Editor and the Tools menu.  These components are especially helpful if you are a new JMP user who is learning to navigate the interface and learning what the different options mean.  You might like to print a copy of the Quick Reference Card and have it handy as you learn more about JMP.&lt;br /&gt;</description>
	<pubDate>Thu, 04 Mar 2010 20:28:36 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: See You at SAS Global Forum</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/289-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/289-See-You-at-SAS-Global-Forum.html</link>
	<description>It’s like I won a golden ticket to Willy Wonka’s chocolate factory. That’s what it feels like to be a SAS employee who’s asked to go to &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/index.html&quot;&gt;SAS Global Forum&lt;/a&gt;, April 11-14 in Seattle. The buzz on the demo-room floor, hearing from thought leaders both entertaining and enlightening, the interaction between the brilliant developers and the genius folks who use the software … it’s really an action-packed few days.  &lt;br /&gt;
&lt;br /&gt;
But with that golden ticket comes a lot of responsibility. In addition to providing on-site coverage for this blog, I’ll be reconnecting with customers who have been using JMP for years as well as hosting members of the press who are just learning about JMP. But my self-imposed goal is to leave SAS Global Forum with no fewer than 10 new acquaintances, at least five of whom are using JMP and &lt;a href=&quot;http://www.sas.com&quot;&gt;SAS&lt;/a&gt; together. I want to learn about their applications, and I want to turn those applications into &lt;a href=&quot;http://www.jmp.com/software/success/index.shtml&quot;&gt;success stories&lt;/a&gt; for the rest of the world to see. &lt;br /&gt;
&lt;br /&gt;
So, if you’re using JMP and some other SAS product together, I want to meet you. &lt;br /&gt;
&lt;br /&gt;
After you take in &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/featured.html&quot;&gt;Stephen Few’s post-conference seminar&lt;/a&gt; and after you’ve been dazzled by my boss, Jon Weisz, at the &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/glance.html&quot;&gt;Technology Connection&lt;/a&gt;, come find me. Seek me out between the &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/pagenda.html&quot;&gt;papers presented&lt;/a&gt; by my JMP friends and colleagues, including my big boss, &lt;a href=&quot;http://www.sas.com/presscenter/bios/jsall.html&quot;&gt;John Sall&lt;/a&gt;. When you &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/pagenda.html#saved&quot;&gt;build your agenda&lt;/a&gt;, build in time to share your story with me. &lt;br /&gt;
&lt;br /&gt;
You’ll find me on the demo-room floor or wherever JMP papers are being presented. I look forward to seeing you in Seattle!</description>
	<pubDate>Thu, 04 Mar 2010 16:17:29 +0000</pubDate>
</item>
<item>
	<title>SAS Global Forum: SAS CEO Jim Goodnight Extends Special Invitation</title>
	<guid>http://blogs.sas.com/sgf/index.php?/archives/99-guid.html</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/s5cOhvUXsfs/index.php</link>
	<description>As Dr. Goodnight explains, SAS Global Forum (formerly known as SUGI) was started by SAS users, who held their &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/previous/index.html&quot;&gt;first conference&lt;/a&gt; in 1976, several months before SAS was even incorporated as a company.    The successful tradition of a user run conference, guided by an &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/about/execboard.html&quot;&gt;Executive Board &lt;/a&gt;of SAS users, continues today, 35 years later.   &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
If you haven’t registered already, be sure to do so soon.  &lt;strong&gt;Early registration ends March 8! &lt;/strong&gt; Register now, and you can save up to $250 off your registration fee.   There are additional &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/ways.html&quot;&gt;ways to save &lt;/a&gt;as well.  Fees will increase on March 9 for &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/fees.html&quot;&gt;all Registration Packages.&lt;/a&gt;   &lt;br /&gt;
&lt;br /&gt;
This year will be my 14th conference, and I totally agree with how Dr. Goodnight sums things up in his invite video.   “[SAS Global Forum is a...] huge collaborative forum where problems are solved, techniques are shared, and life-long friendships are made.”&lt;br /&gt;
 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/s5cOhvUXsfs&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 03 Mar 2010 21:23:00 +0000</pubDate>
</item>
<item>
	<title>SAS Global Forum: Michael Raithel's plans for SAS Global Forum</title>
	<guid>http://blogs.sas.com/sgf/index.php?/archives/98-guid.html</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/Ucfb9QzfiEY/index.php</link>
	<description>&lt;img width=&quot;137&quot; height=&quot;137&quot; src=&quot;http://blogs.sas.com/sgf/uploads/Tubbs_Waynette_LinkedIn.jpg&quot; alt=&quot;&quot; /&gt;While at SAS, I hope to get the opportunity to talk with all of the &lt;a href=&quot;http://blogs.sas.com/sgf/index.php?/archives/96-SAS-Global-Forum-2010-Pencil-it-in.html&quot;&gt;SAS icons&lt;/a&gt;. I’ve had the privilege to meet many. Before the SAS winter break, I had the privilege to talk with another: Michael Raithel.&lt;br /&gt;
&lt;br /&gt;
At SAS® Global Forum 2010, Raithel will be presenting the Tuesday lunch feature presentation, “&lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/featured.html#raithel&quot;&gt;It’s not easy being a SAS programmer&lt;/a&gt;.&quot; So, I thought you might like to know a little more about who he is and what he does.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Who he is&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.linkedin.com/ppl/webprofile?vmi=&amp;amp;id=4473514&amp;amp;pvs=pp&amp;amp;authToken=Xu_4&amp;amp;authType=name&amp;amp;locale=en_US&amp;amp;trk=ppro_viewmore&amp;amp;lnk=vw_pprofile&quot;&gt;Raithel&lt;/a&gt; is a SAS programmer, former NESUG conference chair, former SUGI section chair, three-time &lt;a href=&quot;http://support.sas.com/publishing/authors/raithel.html&quot;&gt;SAS author&lt;/a&gt; and a Senior Systems Analyst at &lt;a href=&quot;http://www.westat.com/&quot;&gt;Westat&lt;/a&gt;. Senior Systems Analyst … how many Senior Systems Analysts have you met? When I was at NESUG (my first regional), I met many. Raithel’s answer to my quip said it all, though. “If they called me ‘Senior Dog Catcher,’ it wouldn’t matter. I have a wonderful, fulfilling job here. This is an excellent place to work. There is relatively low turnover and very high job satisfaction; a very professional and serious, yet respectful, work environment.” &lt;br /&gt;
&lt;br /&gt;
So far, he seems pretty much rank and file with the other SAS icons, doesn’t he? Raithel also has at least one other cool point: His first book, &lt;em&gt;&lt;a href=&quot;http://listserv.uga.edu/cgi-bin/wa?A2=ind9705a&amp;amp;L=sas-l&amp;amp;O=D&amp;amp;P=20095&quot;&gt;Tuning SAS Applications in the MVS Environment&lt;/a&gt;&lt;/em&gt;, is now part of the Smithsonian Institution’s Museum of American History Information Technology Collection. Well now, that’s the stuff of legends. Wouldn’t you agree? &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;SAS crunchers and munchers&lt;/strong&gt;&lt;br /&gt;
Westat is an employee-owned corporation that provides contract research services to businesses, foundations, US government agencies, and state and local governments. A typical example of work Westat does is to host, manage and clean data for &lt;a href=&quot;http://www.bing.com/search?q=State+Cancer+Registry&amp;amp;form=OSDSRC&quot;&gt;a state cancer registry&lt;/a&gt;. “SAS is an integral part of the software we use to manage the data” said Raithel. “Most of the other hundreds of research projects conducted for clients each year by Westat use SAS products.” &lt;br /&gt;
&lt;br /&gt;
“We’re basically a meat and potatoes kind of SAS shop,” said Raithel. “By that, I mean we have 18 SAS products that are the foundation of much of our work. We have deployed four &lt;a href=&quot;http://www.sas.com/technologies/dw/etl/access/relational.html&quot;&gt;SAS/ACCESS®&lt;/a&gt; interfaces, &lt;a href=&quot;http://www.sas.com/technologies/dw/etl/connect/&quot;&gt;SAS/CONNECT®&lt;/a&gt;, SAS/GRAPH®, SAS/Genetics™, SAS/IML®, SAS/Intrnet, and SAS/STAT®, to name a few. We are also looking to expand our use of SAS to include &lt;a href=&quot;http://www.sas.com/data-quality/index.html&quot;&gt;SAS® Data Quality&lt;/a&gt;.” &lt;br /&gt;
&lt;br /&gt;
Westat may consider itself a “meat and potatoes SAS shop,” but the company is proving that treating people well leads to success. Success is promoted and encouraged by a support infrastructure that includes an in-house technical support unit and Westat-written SAS resources. &lt;br /&gt;
&lt;br /&gt;
“On our intranet, we have SAS Resources Web pages that give our users one-stop shopping to learn what SAS is all about at Westat, including links to contact information for the people in my group, Westat’s SAS technical support,” said Raithel. “The pages include instructions for loading SAS on a desktop, SAS resources and Westat conference papers, documentation for the SAS products we use, the methods we use for validating hot fixes and even the date and location of the next Westat SAS Users Group meeting.” &lt;br /&gt;
&lt;br /&gt;
According to Raithel, Westat’s SAS technical support department, which he heads, helps to ensure that SAS Institute's Technical Support doesn’t receive a flood of calls each day from Westat. Raithel and his two staff members “answer everything from, ‘I can’t open SAS today,’ to ‘What is happening with SAS 9.2?’ and ‘This report looks kind of funny.’” &lt;br /&gt;
&lt;br /&gt;
When Raithel and his staff have questions they can’t answer, they usher them through the official &lt;a href=&quot;http://support.sas.com/ctx/supportform/createForm&quot;&gt;SAS Technical Support&lt;/a&gt; process. “When there is a satisfactory result, and we believe that question is going to affect more users, we post it to the in-house listserv – SAS Outlook Information Forum,” he said. “SAS users at Westat also post questions and answers on the listserv.” &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Success isn’t guaranteed, it’s mastered&lt;/strong&gt;&lt;br /&gt;
Each year, Westat purchases SAS training EPTO units. “We buy enough &lt;a href=&quot;http://support.sas.com/training/discounts/epto.html&quot;&gt;EPTO units&lt;/a&gt; per year to allow us to have custom-tailored classes taught in our facilities,” said Raithel. “SAS Education has been very cooperative during the past three years in listening to our training needs and modifying some of the existing SAS classes to suit those needs.” &lt;br /&gt;
&lt;br /&gt;
Westat also relies on a cadre of in-house SAS experts to teach beginner and intermediate SAS classes. “Once a year we have a SAS Institute speaker present at our Westat SAS user group meeting, and we invite speakers from outside organizations, such as the Federal Reserve Board and the Bureau of Labor Statistics,” said Raithel. &lt;br /&gt;
&lt;br /&gt;
The education that Westat SAS users receive is not all piped in. Many Westat SAS users are experts in their own right. One former SUGI conference chair, two NESUG and one SESUG conference chair came from Westat’s staff. At Westat, SAS conference participation is indispensable. “We send a lot of people to SAS user group meetings” said Raithel. “During the past 13 years, Westat staff has published 200 SAS conference papers. &lt;br /&gt;
&lt;br /&gt;
“We feel that conference experience is invaluable,” he said. “When our staff attends a SAS conference, they pick up tips from the presentations and a lot of good information comes back to Westat. &lt;br /&gt;
&lt;br /&gt;
“After every conference, those who attend are on the hook for a 5- to10-minute presentation of the best papers and new ideas. We know that when we send people they’re going to enrich themselves by gaining new SAS knowledge, and that knowledge is going to come back and be available to other Westat staff.” &lt;br /&gt;
&lt;br /&gt;
You can find some of Michael Raithel’s books, interviews, tips and past presentations on &lt;a href=&quot;http://support.sas.com/dsearch?qt=michael+raithel&amp;amp;ct=&amp;amp;col=suppprd&amp;amp;nh=10&amp;amp;qp=&amp;amp;qc=suppsas&amp;amp;ws=1&amp;amp;qm=1&amp;amp;st=1&amp;amp;lk=1&amp;amp;rf=0&amp;amp;oq=&amp;amp;rq=0&quot;&gt;support.sas.com&lt;/a&gt;. You can meet Raithel at SAS Global Forum 2010 at the authors’ reception in the SAS Publishing demo area on Monday evening from 6 p.m. until 7:30 p.m. &lt;br /&gt;
&lt;br /&gt;
Add “&lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/featured.html#raithel&quot;&gt;It’s not easy being a SAS programmer&lt;/a&gt;” to your SAS Global Forum &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/pagenda.html&quot;&gt;agenda&lt;/a&gt;. This SAS Global Forum Tuesday lunchtime presentation by Raithel will take a lighthearted look at some of the societal, workplace and industry issues that SAS programmers routinely face. *An extra fee event. 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/Ucfb9QzfiEY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 03 Mar 2010 20:57:00 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: SAS: The . Manual</title>
	<guid>http://blogs.sas.com/sasdummy/index.php?/archives/155-guid.html</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/-P3HLv5HEYY/index.php</link>
	<description>Check out &lt;a href=&quot;http://www.thejuliagroup.com/blog/?p=401&quot; title=&quot;Maybe you can kiss her medal.&quot;&gt;AnnMaria's blog&lt;/a&gt; covering what she's learned by being on the bleeding edge: using SAS 9.2 for Windows x64 on a Win7 virtual machine.  Also, her short primer on XPT files makes me want to add some &lt;a href=&quot;http://support.sas.com/kb/16/800.html&quot; title=&quot;EG doesn't support XPT directly...yet&quot;&gt;native capability&lt;/a&gt; into SAS Enterprise Guide.  &lt;br /&gt;
&lt;br /&gt;
If your goal is to send a SAS data set into a new JMP session, you can use &lt;a href=&quot;http://blogs.sas.com/sasdummy/index.php?/archives/78-Open-in-JMP-from-SAS-Enterprise-Guide.html&quot; title=&quot;Open in JMP&quot;&gt;this task&lt;/a&gt; right now.  In SAS Enterprise Guide 4.3 (later this year), we'll have a built-in &lt;strong&gt;Send To JMP&lt;/strong&gt; feature. 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/-P3HLv5HEYY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 03 Mar 2010 13:32:37 +0000</pubDate>
</item>
<item>
	<title>SAS from Out in Left Field: SaviDataSet 1.0.0.5 Released</title>
	<guid>tag:blogger.com,1999:blog-20769129.post-5077661394377268046</guid>
	<link>http://savian.blogspot.com/2010/03/savidataset-1005-released.html</link>
	<description>I just posted the latest version of the SaviDataSet reader/writer. The latest version allows for its use from the command line for converting SAS datasets to delimited, XML, and Excel files (2003 &amp;amp; 2007).&lt;br /&gt;&lt;br /&gt;Please see the Help File in the Savian--&gt; SaviDataSet --&gt; Help.txt folder for instructions.&lt;br /&gt;&lt;br /&gt;I will be incorporating a write feature in at some point but it is more complex since variables need to be defined.&lt;br /&gt;&lt;br /&gt;The latest release can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://cid-8bca55fbca813d37.skydrive.live.com/self.aspx/Applications/SaviDataSet.zip&quot;&gt;SaviDataSet 1.0.0.5&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/20769129-5077661394377268046?l=savian.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 03 Mar 2010 13:27:23 +0000</pubDate>
</item>
<item>
	<title>the SAS-BI blog: Addressing Security at the Root - BI Dashboard 4.2 Tips</title>
	<guid>tag:blogger.com,1999:blog-15946403.post-2283666577701741673</guid>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/PNI3C5E8AAM/addressing-security-at-root-bi.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;You may choose to address security of who can view what dashboards within a SAS Information Delivery Portal page by managing the 'Sharing' capabilities at the Page or Portlet levels, however the most gradular level might also require a 'lock down' to avoid users surfing for and locating dashboards they shouldn't see.&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;In order to accomplish this, utilize the 'Folders' tab&amp;nbsp;in SAS Management Console and navigate to:&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;System-&amp;gt;Applications-&amp;gt;SAS BI Dashboard -&amp;gt; SAS BI Dashboard 4.2&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_huF4aTxC8y8/S4galUThZZI/AAAAAAAABkA/4zbmJvinOg0/s1600-h/Metadata+Elements+Access+Control+in+SMC+Folder+4.2.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;393&quot; src=&quot;http://1.bp.blogspot.com/_huF4aTxC8y8/S4galUThZZI/AAAAAAAABkA/4zbmJvinOg0/s400/Metadata+Elements+Access+Control+in+SMC+Folder+4.2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;span&gt;&lt;strong&gt;IMPORTANT NOTE: &lt;/strong&gt;&lt;/span&gt;You will need to modify each element individually as the current version of BI Dashboard (9.2M2 - 4.2) doesn't support moving the elements into an organized folder structure.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/15946403-2283666577701741673?l=sas-bi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RealBusinessIntelligenceForRealUsers/~4/PNI3C5E8AAM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 03 Mar 2010 09:01:00 +0000</pubDate>
</item>
<item>
	<title>Jurassic SAS in the BI/EBI World: HTML, PDF, RTF (and more) all at the same time.</title>
	<guid>tag:blogger.com,1999:blog-1116546449646002174.post-5249387818231246121</guid>
	<link>http://hcsbi.blogspot.com/2010/03/html-pdf-rtf-and-more-all-at-same-time.html</link>
	<description>&lt;i&gt;or . . . when is a session not really a session.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In my &lt;a href=&quot;http://hcsbi.blogspot.com/2010/02/sessions-double-edged-sword.html&quot;&gt;last post&lt;/a&gt; I illustrated explicity creating and using a session. Of course as with all things &lt;b&gt;SAS&lt;/b&gt; related, that is not the only way to create a session!&lt;br /&gt;&lt;br /&gt;In order for ODS to support creating html page with mixed text and graphics (e.g., a PROC PRINT and a PROC GCHART), ODS uses &lt;em&gt;lightweight&lt;/em&gt; sessions. These are sessions without a lot of the overhead of a full session, but which allow a program to write some content, e.g., in the case of ODS, perhaps a graph where the generated HTML contains a link that &lt;b&gt;&lt;em&gt;replays&lt;/em&gt;&lt;/b&gt; the graph. So while it looks to the user like they are getting a table and graph in one request, there are actually two requests. Run this sample &lt;a href=&quot;http://www.hcsbi.com/scripts/broker.exe?_debug=0&amp;amp;_service=appdisp&amp;amp;_program=saspress.chapter8.tableAndGraph.source&quot;&gt;Table and Graph&lt;/a&gt; and take a look at the generated HTML for the &lt;b&gt;img&lt;/b&gt; tag.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note that this example is actually a SAS/IntrNet sample from my &lt;a href=&quot;http://www.sascommunity.org/wiki/Building_Web_Applications_with_SAS/IntrNet:_A_Guide_to_the_Application_Dispatcher&quot;&gt;SAS Press Book&lt;/a&gt; . . . . . . but the Stored Process Server works the same way!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The generated link uses the &lt;em&gt;replay&lt;/em&gt; program to do that. Upon a review of the generated HTML (just do a View Source in your browser) you see that the &lt;em&gt;replayed&lt;/em&gt; graph is actually an entry in a SAS catalog. Well, it turns out that whenever you submit a request for the Stored Process Server to run a program, SAS creates a catalog and the catalog name is available to your program as the macro variable reference &lt;strong&gt;&lt;em&gt;&amp;amp;_tmpcat&lt;/em&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;And now it gets even more interesting because simply by writing something to that catalog causes SAS to create the &lt;em&gt;lightweight&lt;/em&gt; session.&lt;br /&gt;&lt;br /&gt;Now lets consider the case where we want to generate an HTML report, but you also want to provide a way for a user to access a printable version of the report (e.g., a PDF file) or an easily editable version (e.g., an RTF file) without having to rerun the reporting code. A lightweight session can be used to so that ODS will write PDF and RTF versions to the &lt;strong&gt;&lt;em&gt;&amp;amp;_tmpcat&lt;/em&gt;&lt;/strong&gt; catalog while generating/streaming the HTML version back to the users browser.&lt;br /&gt;&lt;br /&gt;Just include statements like this in your program:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;filename pd catalog &quot;&amp;amp;_tmpcat..shoes.pdf&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;filename rt catalog &quot;&amp;amp;_tmpcat..shoes.rtf&quot;;&lt;br /&gt;&lt;br /&gt;and then use the stpBegin macro for the HTML version and explicit ODS statements for the PDF and RTF versions:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;%stpBegin&lt;br /&gt;&amp;nbsp;&amp;nbsp;ods pdf file = pd style = sasweb notoc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ods rtf file = rt style=sasweb;&lt;br /&gt;&lt;br /&gt;then include whatever your reporting code is (e.g., PRINT, TABULATE, REPORT, etc.). &lt;br /&gt;&lt;br /&gt;We now need to include some HTML to provide the hyperlinks to that will &lt;em&gt;replay&lt;/em&gt; the PDF and/or RTF versions. The following DATA steps creates macro variables whose values are the needed HTML:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;data _null_;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;call symput('replayPDF','''&amp;lt;center&amp;gt;&amp;lt;a href=&quot;'||&amp;amp;_replay||'shoes.pdf&quot;&amp;gt;Printable (PDF)&amp;lt;/a&amp;gt;&amp;lt;/center&amp;gt;''');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;call symput('replayRTF','''&amp;lt;center&amp;gt;&amp;lt;a href=&quot;'||&amp;amp;_replay||'shoes.rtf&quot;&gt;Editable (RTF)&amp;lt;/a&amp;gt;&amp;lt;/center&amp;gt;''');&lt;br /&gt;&amp;nbsp;&amp;nbsp;run;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;and, yea, I know the quoting is &lt;b&gt;UGLY&lt;/b&gt;. I promise I'll blog about better ways to do this at some point in the future ;-).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;and these ODS HTML statements generate the needed links in the HTML version.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ods html text = &amp;amp;replayPDF&lt;br /&gt;&amp;nbsp;&amp;nbsp;ods html text = &amp;amp;replayRTF&lt;br /&gt; &lt;br /&gt;And, as a bonus, since the ODS HTML statement does not write any content to the PDF or ODS destinations, those versions of the reports do not contain the hyperlink text!&lt;br /&gt;&lt;br /&gt;And since the %stpEnd macro generates an&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ODS _ALL_ close;&lt;br /&gt;&lt;br /&gt;statement, it will close all of the output destinations for you.&lt;br /&gt;&lt;br /&gt;Feel free to check out this sample on my &lt;a href=&quot;http://www.hcsbi.com:65432/SASStoredProcess/do?_program=/Projects/Tools/runMacro&amp;amp;macroToRun=lightweightsessionsexample&amp;amp;_odsstyle=html&quot;&gt;server&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;And, of course, there are more examples of sessions and lightweight sessions in &lt;a href=&quot;http://www.sascommunity.org/wiki/Building_Web_Applications_with_SAS/IntrNet:_A_Guide_to_the_Application_Dispatcher&quot;&gt;Building Web Applications with SAS/IntrNet&amp;reg;: A Guide to the Application Dispatcher&lt;/a&gt;. And they work pretty much the same way in the Stored Process Server (with the exception of the one issue highlighted in my PRIOR POSTING).&lt;br /&gt;&lt;br /&gt;Happy Sessioning ;-).&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1116546449646002174-5249387818231246121?l=hcsbi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 03 Mar 2010 07:10:00 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - Grouping Tasks</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-6162464564771989170</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/aJ7oRMLs3HM/project-plans-in-excel-grouping-tasks.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S3_209XwqQI/AAAAAAAAANs/XKBAjbYGkNg/s1600-h/XlsPP_C5.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;82&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S3_209XwqQI/AAAAAAAAANs/XKBAjbYGkNg/s200/XlsPP_C5.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;In the two &lt;a href=&quot;http://notecolon.blogspot.com/search/label/ExcelGantt&quot;&gt;previous posts in this series&lt;/a&gt; I described how to create a neat and simple Gantt chart and how to add dates to the day numbers. In this post I’ll describe how to groups your tasks in the chart that was featured in the previous post. The picture alongside (right) shows the end result from today's post. Grouping tasks is a generally useful thing to do, but I also find that my list of tasks increases as time goes by, so I might not need groups to begin with, but they become a useful way of keeping my plan tidy after it has grown.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHwjIiPBI/AAAAAAAAAM0/e9En1XBoQSk/s1600/XlsPP_B3.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;73&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHwjIiPBI/AAAAAAAAAM0/e9En1XBoQSk/s200/XlsPP_B3.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;As with the previous cases, I’m going to describe a quick and simple method. The objective is to have a useful and communicative chart without spending too long on creating it and without making it difficult to maintain. We start with the chart that was created in the last posting (shown to the left). Remember my comments in the first post in this series: I expect SAS developers to run their own (small to medium sized) projects from time-to-time, and I expect them to know how to work to a plan.&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Let’s begin by adding a group column (inserted as column A, and then filled with appropriate values):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3_2cd_nl4I/AAAAAAAAANM/vbBfaPBgyh0/s1600-h/XlsPP_C1.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;140&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3_2cd_nl4I/AAAAAAAAANM/vbBfaPBgyh0/s400/XlsPP_C1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Select cells A2 to E6, i.e. the cells that have the column headers and our data. Launch the Subtotals window (in Excel 2002 it’s available from the Data menu). Use ticks to add subtotals to Start, Effort and End (in the summary rows we want to see summarised values for these three columns - yes, I know it's not appropriate to &quot;sum&quot; Start and End, just bear with me!):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S3_2dx4oCMI/AAAAAAAAANU/N2NCTg2km2M/s1600-h/XlsPP_C2.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S3_2dx4oCMI/AAAAAAAAANU/N2NCTg2km2M/s320/XlsPP_C2.JPG&quot; width=&quot;285&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
When you click OK you’ll see that outlines have been added, and Start, Effort and End are being totalled (and sub-totalled). We need to change the “(sub-)totals” for start and end to show minimum and maximum instead (see, I asked you to bear with me!). Select column C and use Edit/Replace to replace “SUBTOTAL(9,” with “SUBTOTAL(5,”; and in column E, replace “SUBTOTAL(9,” with “SUBTOTAL(4,”. Finally, you might want to select column A and remove the word Total. The result looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S3_2fCuKSGI/AAAAAAAAANc/XX80QzrVlzY/s1600-h/XlsPP_C3.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;162&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S3_2fCuKSGI/AAAAAAAAANc/XX80QzrVlzY/s400/XlsPP_C3.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Q: &lt;/b&gt;What was that stuff with changing subtotal 9 to subtotal 5 and 4?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;A: &lt;/i&gt;&lt;/b&gt;&lt;i&gt;Excel's subtotal function does more than subtotaling. The first parameter is a numeric code that tells the function what you want it to do. 9 indicates summarisation, i.e. adding-up, but 5 indicates you want to see the minimum value, and 4 indicates maximum value.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
To finish our work we might a) Replace “Grand” in cell A9 with something more suitable such as “TOTAL”, and b) enhance our conditional formatting to make the (sub-)total rows look distinctive. We can spot them because the task name is blank in these rows. Thus we change the conditional formatting as shown below for cell G3 as an example (then just use Format Painter to spread it across the whole Gantt chart). Note the additional clause in the AND function of the first clause in addition to the extra condition:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3_2zhVrxfI/AAAAAAAAANk/h1A3k_Tdsz4/s1600-h/XlsPP_C4.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;192&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3_2zhVrxfI/AAAAAAAAANk/h1A3k_Tdsz4/s400/XlsPP_C4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
And here’s the final result:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S3_209XwqQI/AAAAAAAAANs/XKBAjbYGkNg/s1600-h/XlsPP_C5.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;http://1.bp.blogspot.com/_FBkMa5T6s6k/S3_209XwqQI/AAAAAAAAANs/XKBAjbYGkNg/s400/XlsPP_C5.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This series of three posts has shown how to quickly and easily create a simple Gantt chart. My objective has been to produce a neat, communicative chart without too much effort. In addition, the chart has to be robust and allow me to make changes (such as adding tasks or changing them) without disturbing the chart and requiring me to start from scratch. These charts demonstrate that the developer is in control of their project (without spending more time on planning than on delivering the goods).&lt;br /&gt;
&lt;br /&gt;
If I'm working on a large enough project I sometimes add a couple of embellishments to the chart (given that the size of the project merits the extra effort involved). I like to highlight &quot;today&quot; and I like to track %done and show it on the pseudo-bars of the Gantt chart. I'll describe how to do this in a bonus post next week.&lt;br /&gt;
&lt;br /&gt;
It is possible to use Excel charts to create a similar output. The chart can look more pretty than what we've achieved above, but I find that it can become unwieldy and difficult to read &amp;amp; print as the number of tasks grows. Hence, I choose to use the worksheet rather than a chart. I'll describe how to do this in a bonus post in a subsequent week.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-6162464564771989170?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/aJ7oRMLs3HM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 02 Mar 2010 20:20:51 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Data Set Reader and Log Analyser from Oceanview</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-8946927753424271978</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/rqTWy7r_vBM/note-data-set-reader-and-log-analyser.html</link>
	<description>UK-based &lt;a href=&quot;http://www.oview.co.uk/&quot;&gt;Oceanview Consultancy&lt;/a&gt; have a couple of neat SAS utilities that just might meet your SAS team's needs. DSREAD reads a SAS data set and provides information about it without requiring SA software; and Elvis(!) is a log analyser par excellence.&lt;br /&gt;
&lt;br /&gt;
Back in May 2006 when &lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt; was an email newsletter and boasted 3,700 subscribers worldwide, &lt;a href=&quot;http://www.ratcliffe.co.uk/note_colon/note17.htm&quot;&gt;issue 17&lt;/a&gt; featured the Elvis log analyser (and some awful usage of some of The King's record titles). Well, Chris Long wrote to me recently to tell me of his latest creation - &lt;a href=&quot;http://www.oview.co.uk/dsread/&quot;&gt;DSREAD&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;Chris describes DSREAD as a simple Windows command-line utility for working with data sets (SAS7BDAT&amp;nbsp;). The current version of DSREAD allows&amp;nbsp;you to:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;List the summary details of datasets&lt;/li&gt;
&lt;li&gt;List the contents (the variable names and other attributes*) of datasets&lt;/li&gt;
&lt;li&gt;Convert a dataset to CSV format for import into Excel and other software&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The latter functionality could be useful in an automated system that uses a variety of technologies.&lt;br /&gt;
&lt;br /&gt;
Chris lists a few limitations that you should read before downloading and using it. However, in a development environment it could prove useful.&lt;br /&gt;
&lt;br /&gt;
It's good to see continued activity from Oceanview in the area of third-party SAS utilities (supported or otherwise). There are not many third-party SAS-related products available (the excellent &lt;a href=&quot;http://www.futrix.com/&quot;&gt;Futrix &lt;/a&gt;being the notable exception).&lt;br /&gt;
&lt;br /&gt;
With regard to Elvis, as issue 17 of the&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt;&amp;nbsp;email &amp;nbsp;newsletter told us, it provides a novel and powerful environment for exploring your SAS logs. See the &lt;a href=&quot;http://www.oview.co.uk/elvis/index.htm&quot;&gt;Elvis microsite&lt;/a&gt; for further detail.&lt;br /&gt;
&lt;br /&gt;
Finally, if you like quizzes, you might like Chris's pet project: QuizBang. Visit the &lt;a href=&quot;http://www.quizbang.co.uk/&quot;&gt;QuizBang web site&lt;/a&gt;, and see for yourself.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-8946927753424271978?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/rqTWy7r_vBM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 02 Mar 2010 20:08:17 +0000</pubDate>
</item>
<item>
	<title>Key Happenings at support.sas.com: Referring to SAS and its products</title>
	<guid>http://blogs.sas.com/supportnews/index.php?/archives/101-guid.html</guid>
	<link>http://feedproxy.google.com/~r/UpdatesInSasOnlineSupport/~3/xcaVz9vWaMQ/index.php</link>
	<description>&lt;strong&gt;Q:&lt;/strong&gt; How do I refer to SAS in a scientific paper?&lt;br /&gt;
&lt;strong&gt;A:&lt;/strong&gt; Always write the name &quot;SAS&quot; in uppercase letters with no periods. &lt;br /&gt;
&lt;br /&gt;
As you might guess, there are more guidelines and specifics about how to refer to SAS and its products and services.  The complete list of guidelines is available on our corporate Web site under the Press Center in &lt;a href=&quot;http://blogs.sas.com/supportnews/exit.php?url=aHR0cDovL3d3dy5zYXMuY29tL3ByZXNzY2VudGVyL2d1aWRlbGluZXMuaHRtbA==&amp;amp;entry_id=101&quot; title=&quot;http://www.sas.com/presscenter/guidelines.html&quot; target=&quot;www&quot;&gt;Editorial Guidelines&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
I have selected a few items from the guidelines that may more accurately address the question that was intended.&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Do not use a trademark symbol after the word SAS when referring to SAS Institute Inc. &lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;Include the SAS trademark notice shown below in a footnote at the bottom of the page or the end of the article.&lt;br /&gt;&lt;br /&gt;
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. &amp;reg; indicates USA registration. &lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;Scientific journals often require enough information to replicate your data findings. In these cases, the proper citation would be as follows (brackets &quot;[]&quot; indicate data that should be supplied by you): &lt;br /&gt;&lt;br /&gt;
The [output/code/data analysis] for this paper was generated using [SAS/STAT] software, Version [8] of the SAS System for [Unix]. Copyright © [year of copyright] SAS Institute Inc. SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc., Cary, NC, USA. &lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
Remember that I have provided only a partial list. Visit the &lt;a href=&quot;http://blogs.sas.com/supportnews/exit.php?url=aHR0cDovL3d3dy5zYXMuY29tL3ByZXNzY2VudGVyL2d1aWRlbGluZXMuaHRtbA==&amp;amp;entry_id=101&quot; title=&quot;http://www.sas.com/presscenter/guidelines.html&quot; target=&quot;www&quot;&gt;Editorial Guidelines&lt;/a&gt; for full details.&lt;br /&gt;
&lt;br /&gt;
 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/UpdatesInSasOnlineSupport/~4/xcaVz9vWaMQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 02 Mar 2010 19:10:51 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Don Henderson Has a Blog</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-4501439582159843540</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/lJYq2Fr2CYk/note-don-henderson-has-blog.html</link>
	<description>Somewhat humbly titled &quot;&lt;a href=&quot;http://hcsbi.blogspot.com/&quot;&gt;Jurassic SAS in the BI/EBI World&lt;/a&gt;&quot;, long-time guru of SAS Don Henderson has joined the blogosphere. Don's CV is long and impressive and includes over 30+ plus years of using SAS;&lt;br /&gt;
Don is author of the &lt;a href=&quot;http://support.sas.com/publishing/authors/henderson.html&quot;&gt;SAS Press book&lt;/a&gt; &quot;Building Web Applications with SAS/IntrNet: A Guide to the Application Dispatcher&quot;, and one of the principal architects for &lt;a href=&quot;http://sascommunity.org/&quot;&gt;sasCommunity.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I've already learned useful stuff from Don's postings, including his January 26 post &quot;&lt;a href=&quot;http://hcsbi.blogspot.com/2010/01/autoexec-facility-for-stored-process.html&quot;&gt;An autoexec facility for the Stored Process Server&lt;/a&gt;&quot; wherein he mentions that stored processes can have a program automatically run after each invocation (like a retrospective autoexec). I'd overlooked this useful feature.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-4501439582159843540?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/lJYq2Fr2CYk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 02 Mar 2010 12:00:06 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: Credit Cards: A Method Behind the Madness</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/288-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/288-Credit-Cards-A-Method-Behind-the-Madness.html</link>
	<description>It’s no surprise that a Google search for credit card offers yields more than 100 pages of links (and ads). Lou Valente, one of our &lt;a href=&quot;http://www.jmp.com/applications/doe/&quot;&gt;design of experiments&lt;/a&gt; experts, recently used JMP to share a direct marketing DOE case study from the 2007 book &lt;em&gt;Testing 1 - 2 - 3: Experimental Design with Applications in Marketing and Service Operations&lt;/em&gt; by Johannes Ledolter and Arthur Swersey.&lt;br /&gt;
&lt;br /&gt;
A financial institution sought to sell more credit cards and to maximize return on new cards. Which fees and interest rates would yield the most attractive product to new customers? The institution considered offering products with a lower annual fee, a new fee for opening the account, a lower initial interest rate and/or a higher long-term interest rate.  &lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/Goal.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
They planned to mail 120,000 offers in the first pass and then to market the most attractive offer aggressively. Using JMP, Lou created a full 2&lt;sup&gt;4&lt;/sup&gt; factorial experiment to show how they identified the 16 combinations of fees and interest rates that they would offer.  The institution outlined each offer in a separate invitation letter and sent each letter to 7500 prospects.&lt;br /&gt;
 &lt;br /&gt;
&lt;img width=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/Responses2.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Which of the 120,000 offers got the highest response rates? Lou initially used simple Distributions in JMP to interactively investigate the relationship of the factors for the highest response rate. The institution learned that lower annual lower fee, no opening fee and a lower longer interest fee were associated with the highest number of offer acceptances. They were surprised to learn that initial interest was not as important.&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/Response_distribution.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Lou then built a model. Clearly those in the business of offering credit cards wanted to determine the highest acceptable annual fee and maximum initial interest the new customers could bear. Later, they will want to examine cancellations, delinquencies and profit from these new customers. Having that data would be delicious food for JMP junkies and could be helpful to each of us when considering new credit card offers.&lt;br /&gt;
&lt;br /&gt;
Interested in more DOE? Join Lou's March 15 live Webcast, &lt;strong&gt;Design of Experiments to Solve Expensive Process Problems.&lt;/strong&gt; &lt;a href=&quot;http://www.jmp.com/about/events/webcasts/jmpwebcast_detail.shtml?reglink=70130000000BYco&quot;&gt;Registration&lt;/a&gt; is required.</description>
	<pubDate>Mon, 01 Mar 2010 14:00:00 +0000</pubDate>
</item>
<item>
	<title>the SAS-BI blog: Quick Preview of Gauges and Additional Settings Available in BI Dashboard (4.2)</title>
	<guid>tag:blogger.com,1999:blog-15946403.post-5797520059090882357</guid>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/46HrnabHYXY/quick-preview-of-gauges-and-additional.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;Would you like to get a quick preview of the gauge you are using in the BI Dashboard Indicator? Just tap the 'Select ...' button to the right of the 'Gauge type:' dropdown box.&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_huF4aTxC8y8/S4VSLrtekxI/AAAAAAAABjo/73BAwlUrI1Q/s1600-h/select+button.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/_huF4aTxC8y8/S4VSLrtekxI/AAAAAAAABjo/73BAwlUrI1Q/s320/select+button.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;There are then images of what these gauges look like, such as the 'Dials' category below:&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_huF4aTxC8y8/S4VSODlxpNI/AAAAAAAABj4/3EGJ5NijAes/s1600-h/select+image+screen.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_huF4aTxC8y8/S4VSODlxpNI/AAAAAAAABj4/3EGJ5NijAes/s320/select+image+screen.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;Also, if you select the 'Dynamic Gauges' category you will be able to edit the height/width of the gauge, display in 3D, the data format of the associated measure, and whether to orient the gauge horizontally or vertically:&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_huF4aTxC8y8/S4VSM018amI/AAAAAAAABjw/mp-eBDdGdew/s1600-h/select+gauge+screen.jpg&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_huF4aTxC8y8/S4VSM018amI/AAAAAAAABjw/mp-eBDdGdew/s320/select+gauge+screen.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/15946403-5797520059090882357?l=sas-bi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RealBusinessIntelligenceForRealUsers/~4/46HrnabHYXY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 01 Mar 2010 09:00:13 +0000</pubDate>
</item>
<item>
	<title>SAS from Out in Left Field: SaviDataSet Alpha 1.0 On the Web</title>
	<guid>tag:blogger.com,1999:blog-20769129.post-2784811511962246279</guid>
	<link>http://savian.blogspot.com/2010/02/savidataset-alpha-10-on-web.html</link>
	<description>&lt;span&gt;I am finally ready with my SAS dataset reader/writer for .NET. It is written in 100% managed code using .NET 3.5. The dlls can be found&lt;br /&gt;&lt;a href=&quot;http://cid-8bca55fbca813d37.skydrive.live.com/self.aspx/Applications/SaviDataSet.zip?ccr=1994&quot;&gt;here.&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;A sample .NET console application can be found in the program file entries after the installation.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Update 2/13/2010:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I am now testing this against a real-world project so I am finding little bugs here and there. These are being addressed for version 1.0.0.1. If you need a build sooner than it is released, let me know.&lt;/p&gt;&lt;p&gt;I have also found that you need at around 100+ observations for this to work correctly. I am investigating but keep that in mind while testing.&lt;/p&gt;&lt;p&gt;[LATE BREAKING] I fixed the obs issue so I went ahead and uploaded the fixed version. Watch for breaking changes which are in the Readme.txt file. &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Update 2/29/2010&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Based upon Chris' work, I added in a console application that exposed my existing work. It allows for export of the sas7bdat to Excel, delimited, and XML. I will add in import at some point and have designed the interface as such. For example, I put the parms in an XML file to provide enough flexibility to accomplish everything. That has pros and cons but I figured the pros outweighed the cons.&lt;/p&gt;&lt;p&gt;I am also doing something I have meant to do for a long time which is to build a data viewer. Hence, I don't want an interim release but will bundle it all together. I have spent some time this weekend starting that process. All of the components are here but I have to pull them together which I am hoping to do this week.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/20769129-2784811511962246279?l=savian.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 01 Mar 2010 07:24:17 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: AUC calculation using Wilcoxon Rank Sum Test</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-2922323399855835697</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/dQY0VY7K95s/auc-calculation-using-wilcoxon-rank-sum.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/BGv5XeYB-NRuH9PkWnCgPL79ug8/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/BGv5XeYB-NRuH9PkWnCgPL79ug8/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/BGv5XeYB-NRuH9PkWnCgPL79ug8/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/BGv5XeYB-NRuH9PkWnCgPL79ug8/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;Accurately Calculate AUC (Area Under the Curve) in SAS for a binary classifier rank ordered data &lt;br /&gt;
&lt;br /&gt;
In order to calculate AUC for a given SAS data set that is already rank ordered by a binary classifier (such as linear logistic regression), where we have the binary outcome Y and rank order measurement P_0 or P_1 (for class 0 and 1 respectively), we can use PROC NPAR1WAY to obtain Wilcoxon Rank Sum statistics and from there we are able to obtain accurate measurement of AUC for this given data. &lt;br /&gt;
&lt;br /&gt;
The relationship between AUC and Wilcoxon Rank Sum test statistics is: AUC = (W-W0)/(N1*N0)+0.5 where N1 and N0 are the frequency of class 1 and 0, and W0 is the Expected Sum of Ranks under H0: Randomly ordered, and W is the Wilcoxon Rank Sums. &lt;br /&gt;
&lt;br /&gt;
In one application example shown below, PROC LOGISTIC reports c=0.911960, while this method calculates it as AUC=0.9119491555 &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
data test;
  do i = 1 to 10000;
     x = ranuni(1);
     if x + rannor(1) * 0.2 &amp;amp;gt; 0.7 then y = 1;
     else y = 0;
     output;
  end;
run;

ods select none;
ods output Association=Asso;
proc logistic data = test ;
    model y = x;
    score data = test out = predicted;
run;

ods select all;
data _null_;
    set Asso;
    if label2='c' then put nValue2=;
run;

%let Class=0;
ods select none;
ods output WilcoxonScores=WilcoxonScore;
ods output WilcoxonTest=WilcoxonTest;
proc npar1way wilcoxon data=predicted ;
     where y^=.;
     class y;
     var p_&amp;amp;Class;
     output out=wilcoxon;
run;

ods select all;
data AUC;
    set WilcoxonScore end=eof;
    array _A{2, 3} _temporary_;
    if Class=0 then do;
       _A[1,1]=N; _A[1, 2]=SumOfScores; _A[1, 3]=ExpectedSum;
    end;
    else do;
       _A[2,1]=N; _A[2, 2]=SumOfScores; _A[2, 3]=ExpectedSum;
    end;
    if eof then do;
       AUC=(_A[&amp;amp;Class+1, 2]-_A[&amp;amp;Class+1, 3])/(_A[1,1]*_A[2,1])+0.5;
       keep AUC; output;
    end;
run;


&lt;/code&gt;&lt;/pre&gt;NPAR1WAY approach gets AUC=0.9119491555;&lt;br /&gt;
LOGISTIC reports c-statistic = 0.91160&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-2922323399855835697?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/dQY0VY7K95s&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 01 Mar 2010 03:02:23 +0000</pubDate>
</item>
<item>
	<title>SAS Programming: Partial Least Square</title>
	<guid>tag:blogger.com,1999:blog-29815492.post-2895587182950525748</guid>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/VqTvDcVPOwQ/partial-least-square.html</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/fws87mqqxGyOkI8MKQAJ8VHYHos/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/fws87mqqxGyOkI8MKQAJ8VHYHos/0/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/fws87mqqxGyOkI8MKQAJ8VHYHos/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/fws87mqqxGyOkI8MKQAJ8VHYHos/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;In some predictive modelling projects, we may have variables that most of the observations have the same value, while the small percentage rest ones are populated with meaningful values. For example, 90% observations have values=0 but the rest 10% have value=1, 2, 3.....for a variable called WebHits, etc. We may have a large number of such variables, say web hits at different pages, and due to the small percentage of&amp;nbsp;differently valued&amp;nbsp;observations, each variable show minimal predictive power. &lt;br /&gt;
&lt;br /&gt;
But we have a large number of such variables, and a quick way to figure out whether they collectively show up predictive power, we may use Partial Least Square method.&lt;br /&gt;
&lt;br /&gt;
In SAS, we can get the PLS scores and score new data in this way:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
ods select none;
ods output XWeights=Xweights;
ods output XVariableCenScale=XCenScale;
proc pls data=model_sample&amp;nbsp;&amp;nbsp; method=SIMPLS &amp;nbsp;details censcale varscale;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model&amp;nbsp; Event&amp;nbsp;= &amp;amp;covars;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
/* this is for comparison purpose*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output out=pls_tomvars(keep=PRSPCT_ID Enroll &amp;amp;covars _xscr_:) xscore=_xscr_;
run;
ods select all;


proc transpose data=XCenScale out=XCenScale_t;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id variable;
run;

data XCenScale_t;
&amp;nbsp;&amp;nbsp; if _n_=1 then _TYPE_='MEAN';
&amp;nbsp;&amp;nbsp; else _TYPE_='STD';
&amp;nbsp;&amp;nbsp; set XCenSCale_t;
run;

data XWeights;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain _TYPE_ 'PARMS';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set Xweights;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _NAME_=compress('_xscr_'||_n_);
run;


data Xscore/view=Xscore;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set XCenScale_t XWeights;
run;

proc score data=model_sample&amp;nbsp; score=Xscore type=PARMS out=epsilon_std;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &amp;amp;covars;
run;
&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Lightweight yet detailed explanation of PLS and its application to data mining projects can be found at:&lt;br /&gt;
&lt;b&gt;Pharmaceutical Statistics using&amp;nbsp;SAS:&amp;nbsp;A Practical Guide&lt;/b&gt; &lt;i&gt;by Alex Dmitrienko, Christy Chuang-Stein, Ralph B. D'Agostino&lt;/i&gt;, SAS Publishing 2007&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.amazon.com/Pharmaceutical-Statistics-Using-SAS-Practical/dp/159047886X?ie=UTF8&amp;amp;tag=xie1978&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Pharmaceutical Statistics Using SAS: A Practical Guide (SAS Press)&quot; src=&quot;http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=159047886X&amp;amp;tag=xie1978&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=xie1978&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=159047886X&quot; width=&quot;1&quot; /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/29815492-2895587182950525748?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/VqTvDcVPOwQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 01 Mar 2010 03:01:28 +0000</pubDate>
</item>
<item>
	<title>StudySAS Blog: MedDRA and WHODrug Coding | StudySAS Blog [Digg]</title>
	<guid>http://digg.com/programming/MedDRA_and_WHODrug_Coding_StudySAS_Blog</guid>
	<link>http://feedproxy.google.com/~r/sastips/~3/uLBEfTqxIz8/MedDRA_and_WHODrug_Coding_StudySAS_Blog</link>
	<description>Though there are other Coding dictionaries available along with MedDRA (ex: COSTART and WHOART), MedDRA dictionary is typically used in the US for Adverse Events coding. AEMedDRA coding is not the SAS programmers work; it is usually done by medical coder or database programmer.&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/uLBEfTqxIz8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 26 Feb 2010 20:55:25 +0000</pubDate>
</item>
<item>
	<title>the SAS-BI blog: Improve Web Report Studio Performance by Carefully Choosing Processing Locations</title>
	<guid>tag:blogger.com,1999:blog-15946403.post-5735349824375021037</guid>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/HJErEC4_V0Y/improve-web-report-studio-performance.html</link>
	<description>Information Map Studio allows data managers the ability to join tables, create new data elements, and label/format data items for business consumption. However due to this flexibility users must weigh the benefits of customizing information maps against the performance impacts of completing many of these tasks within the Information Map itself.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;From anecdotal evidence (in 3.1), I have seen information maps successfully join small tables and display a few custom measures. However, when large tables are joined or a large number of custom measures are utilized, the performance (within Web Report Studio at least) can be dramatically impacted. (Note - I have found that running a test in Information Map for these cases is not indicative of the performance in Web Report Studio.)&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;So, once all the Web Reports are created and the performance improvements are required, how (in 3.1) can we switch where the custom measure is derived (from an expression within Information Map Studio to a data item in the source table/cube) without crashing the Web Reports? &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;Two options:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;You can add these items and modify the associated web reports by hand - or &lt;/li&gt;
&lt;li&gt;You can modify the XML to ensure that all the web reports use the new item instead.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;div&gt;Add the new measures into a copy of the original imap. Save out the xml &amp;amp; copy the new data element items from within the &amp;lt;ExternalResourceList ...&amp;gt; tagged area (located around the end of the xml file). Now in the original imap, export the XML&amp;nbsp;and copy these new measures within the &amp;lt;ExternalResourceList ...&amp;gt; tagged area.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Then to switch the dataitem from a calculated expression to one of these new data elements follow the example below.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Included is what a simple calculated expression looks like in the information map XML:&lt;br /&gt;
&amp;lt;expr&amp;gt;&lt;br /&gt;
&amp;lt;resourceawarestrexpr exprtype=&quot;2&quot; scope=&quot;2&quot;&amp;gt;&lt;br /&gt;
&amp;lt;reposobjuse prid=&quot;XR1&quot;&amp;gt;&lt;br /&gt;
&amp;lt;string strvalue=&quot;/&quot;&amp;gt;&lt;br /&gt;
&amp;lt;reposobjuse prid=&quot;XR2&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/resourceawarestrexpr&amp;gt;&lt;br /&gt;
&amp;lt;/expr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;In order to 'trick' the information map into using a different data element, you need to change the entire xml block below into the following:&lt;br /&gt;
&amp;lt;Expr&amp;gt;&lt;br /&gt;
&amp;lt;ReposObjUse prid=&quot;XR3&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Expr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;Where the XR3 corresponds to the new data element item in the &amp;lt;ExternalResourceList ...&amp;gt; tagged area added earlier.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;Of course - &lt;strong&gt;&lt;em&gt;ALWAYS&lt;/em&gt;&lt;/strong&gt; take a backup of the Information Map (and all associated WRS reports) since XML editing can introduce it's own&amp;nbsp;problems.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/15946403-5735349824375021037?l=sas-bi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RealBusinessIntelligenceForRealUsers/~4/HJErEC4_V0Y&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 25 Feb 2010 09:00:10 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Successes and Tools</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-352401125712727743</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/U_ik1Cr2G60/note-successes-and-tools.html</link>
	<description>My previous post was our 100th and marks quite a milestone. Since starting in July last year, Google Feedburner tells us:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;yesterday we achieved our highest ever number of subscribers: 156&lt;/li&gt;
&lt;li&gt;we've clocked-up 36,000 views&lt;/li&gt;
&lt;li&gt;our most popular post of all time is &lt;a href=&quot;http://notecolon.blogspot.com/2009/11/dashboards-scorecards-what-to-measure.html&quot;&gt;Dashboards &amp;amp; Scorecards: What To Measure&lt;/a&gt;&amp;nbsp;with 1,055 views (note that the widget in our right-margin shows popularity over the last 7 days)&lt;/li&gt;
&lt;/ul&gt;And Site Meter tells us that the average visit length is over 2 minutes, so we know that you're reading the articles as well as just looking at them ;)&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
The &lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt; blog was preceded by the &lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt; email newsletter, the &lt;a href=&quot;http://www.ratcliffe.co.uk/note_colon/index.htm&quot;&gt;archive&lt;/a&gt; of which is still available from our web site. As I reflected in my&amp;nbsp;&lt;a href=&quot;http://notecolon.blogspot.com/2009/12/whats-it-all-about.html&quot;&gt;December &lt;i&gt;What's It All About?&lt;/i&gt; post&lt;/a&gt;, this blog endeavours to cover the range of experiences and knowledge that a professional SAS developer might be expected to encompass. In other words, the blog includes hints and tips on SAS syntax, but it also covers a range of other topics related to software development including:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Requirements capture&lt;/li&gt;
&lt;li&gt;Design decomposition&lt;/li&gt;
&lt;li&gt;Modelling&lt;/li&gt;
&lt;li&gt;Construction techniques and development processes&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Configuration management&lt;/li&gt;
&lt;li&gt;Peer review&lt;/li&gt;
&lt;li&gt;Dynamic testing&lt;/li&gt;
&lt;li&gt;Effort estimation&lt;/li&gt;
&lt;li&gt;Written and verbal communication&lt;/li&gt;
&lt;li&gt;Interpersonal skills&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Thank you for supporting the blog, and I'm glad you find it of interest.&lt;br /&gt;
&lt;br /&gt;
In doing my work for &lt;a href=&quot;http://rtsl.eu/&quot;&gt;RTSL.eu&lt;/a&gt; I find myself away from the office a lot. To keep up the pace of posts I need a small collection of gadgets and technology. My favourites are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;My &lt;a href=&quot;http://www.acer.com/aspireone/aspireone_8_9/&quot;&gt;Acer Aspire One&lt;/a&gt; that's small enough and light enough to take into any pub and restaurant in the&amp;nbsp;evening, yet with a big enough screen (and enough computing power) to make it eminently usable&lt;/li&gt;
&lt;li&gt;The&lt;a href=&quot;http://www.blogger.com/&quot;&gt; Blogger blogging platform &lt;/a&gt;and associated Google services (described in &lt;a href=&quot;http://notecolon.blogspot.com/2009/10/building-blog.html&quot;&gt;Building the Blog&lt;/a&gt;) that provide such a range of flexible means of&amp;nbsp;maintaining&amp;nbsp;the blog and its posts, and keeping track of its usage&lt;/li&gt;
&lt;li&gt;Morose Media's &lt;a href=&quot;http://www.wmwifirouter.com/&quot;&gt;WMWiFiRouter&lt;/a&gt; that allows me to remain connected whenever I need to be&lt;/li&gt;
&lt;li&gt;My trusty HTC HD2 mobile phone, running Windows Mobile and&amp;nbsp;Morose Media's WMWiFiRouter!&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;And finally, a special mention is due for DropBox. It's like a memory stick in the internet cloud, and it keeps all of my blog stuff synchronised between laptop, office computer and any web terminal I may happen to use. I highly recommend it, and the first 2GB are free! It uses Amazon's S3 storage service (so it's reliable), it adds its own encrypted AES-256 layer (so it's secure), and reviews that compare it with other services (such as JungleDisk) regularly rate DropBox as top due to its user-friendly integration with Windows, Mac and Unix (and iPhone, but not Windows Mobile).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;If you're interested in DropBox, use &lt;a href=&quot;https://www.dropbox.com/referrals/NTQ2NTIxNDQ5&quot;&gt;this link&lt;/a&gt; to get a free account and contribute an extra 250MB to my own DropBox. Given that &lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt; is free and offers no advertising, I hope you won't mind me offering this&amp;nbsp;referral&amp;nbsp;link!&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-352401125712727743?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/U_ik1Cr2G60&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 22:25:41 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Success Demonstrates BI Scope (the BI evolution)</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-7473851204863289851</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/gqE6TuXEv6I/note-success-demonstrates-bi-scope-bi.html</link>
	<description>Business Intelligence (BI) spans simple historic reporting to embedded real-time analytics. This is our 100th post and we're sharing our (minor) celebration with a SAS success.&lt;br /&gt;
&lt;br /&gt;
BI is a commonly used term with a raft of different interpretations. Wikipedia begins to define it thus:&lt;br /&gt;
&lt;blockquote&gt;BI technologies provide historical, current, and predictive views of business operations. Common functions of Business Intelligence technologies are reporting, online analytical processing, analytics, data mining, business performance management, benchmarking, text mining, and predictive analytics.&lt;/blockquote&gt;There's a BI evolutionary path that starts with simple, static reporting on historic data (often delivered with spreadsheets) through to real-time predictive analytics&amp;nbsp;embedded into front-office transactional systems. Many suppliers who claim to offer BI systems barely get off the ground on the BI flight to delivering real value to the enterprise.&lt;br /&gt;
&lt;br /&gt;
All those products that offer sexy, shiny, slick graphics with animated 2.5D fuel&amp;nbsp;gauges&amp;nbsp;that make your historic data look exciting but don't begin to tell you about where you're headed are flattering to deceive. If you're considering implementing a BI solution, make sure your chosen software will give you the headroom to grow the value that the solution delivers. Don't box yourself in with a sexy solution that ultimately offers no real intelligence.&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
SAS salesmen will tell you that they can satisfy the full BI evolutionary path. And they'll point to their recent success in being awarded a Product of the Year award from &lt;i&gt;Customer Interaction Solutions&lt;/i&gt;&amp;nbsp;(CIS) magazine as evidence of offering solutions at the far end of the BI evolutionary path. In January,&amp;nbsp;&lt;a href=&quot;http://www.cismag.com/&quot;&gt;CIS magazine&lt;/a&gt; awarded a &lt;a href=&quot;http://call-center-services.tmcnet.com/topics/call-center-services/articles/73291-winners-the-2009-product-the-year-award-announced.htm&quot;&gt;Product of the Year award&lt;/a&gt; to SAS Real-Time Decision Manager (RTDM).&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.sas.com/solutions/crm/real-time-decision&quot;&gt;SAS RTDM&lt;/a&gt; epitomises the ambition of true BI solutions. Incorporating business rules developed by the business users with a user-friendly graphical interface (and appropriate degrees of security), RTDM uses a service-oriented architecture to deliver SAS analytics into&amp;nbsp;the&amp;nbsp;heart of&amp;nbsp;the&amp;nbsp;customer interaction (telephone, web, ATM), promising recommendations,&amp;nbsp;decisions and actions based upon the best information available.&lt;br /&gt;
&lt;br /&gt;
The most popular reasons for considering a BI solution are to provide an&amp;nbsp;analytical&amp;nbsp;capability&amp;nbsp;to&amp;nbsp;more users, improve integration of data from a variety of sources, and to speed-up access to timely business data. Also, and by no means least amongst the reasons, businesses are often to keen to escape the bonds of spreadsheets and to gain a single, reliable &amp;amp; robust version of the truth.&lt;br /&gt;
&lt;br /&gt;
In addition to the CIS magazine award, January saw &lt;a href=&quot;http://www.gartner.com/technology/media-products/reprints/sas/vol7/article1/article1.html&quot;&gt;SAS placed in the leaders' quadrant&lt;/a&gt; of the Gartner Magic Quadrant for Business Intelligence. Gartner's Magic Quadrant charts vendors' completeness of vision alongside those vendors' perceived ability to execute the vision. Gartner says that &quot;leaders are vendors that are reasonably strong in the breadth and depth of their BI platform capabilities and can deliver on enterprisewide implementations that support a broad BI strategy.&quot;&lt;br /&gt;
&lt;br /&gt;
Gartner's &lt;a href=&quot;view-source:http://www.gartner.com/technology/media-products/reprints/sas/vol7/article1/article1.html#h49&quot;&gt;comments that are specific to SAS&lt;/a&gt;&amp;nbsp;highlight SAS's focus on advanced analytics whilst noting that SAS customers use a broad range of SAS's BI capabilities. However, Gartner strikes a note of caution regarding the new challenges from big players like IBM and SAP who have recently bought previously-niche products such as SPSS, Cognos and Business Objects. Gartner suggest that SAS's comfortable position in the BI world may become less comfortable once the big boys get on top of their purchases.&lt;br /&gt;
&lt;br /&gt;
I &lt;a href=&quot;http://notecolon.blogspot.com/2009/12/note-jim-davis-jousts.html&quot;&gt;noted in December&lt;/a&gt; that SAS were aware of the changing market and felt up to the challenge. Given that SAS BI is currently in the Gartner leaders' quadrant and &lt;a href=&quot;https://www.sas.com/news/preleases/GartnerVisionariesQuadrantDITools.html&quot;&gt;SAS Data Integration (DI) ranks equally highly in Gartner's view&lt;/a&gt;, SAS will consider themselves facing the&amp;nbsp;challenge&amp;nbsp;from a position of strength.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-7473851204863289851?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/gqE6TuXEv6I&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 21:45:51 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Issue 49 of VIEWS News is Available</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-6974986219253358163</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/mKLAWbuixXg/note-issue-49-of-views-news-is.html</link>
	<description>Phil Holland has published &lt;a href=&quot;http://www.sascommunity.org/wiki/File:VIEWS_News_Issue49.pdf&quot;&gt;issue 49 of VIEWS News&lt;/a&gt;, the quarterly journal of the VIEWS International SAS Programming Community. This quarter's issue includes graphical impact, encryption algorithms &amp;amp; format merges, and Excel functions available in SAS 9.2, plus a prize draw especially for VIEWS News readers.&lt;br /&gt;
&lt;br /&gt;
You can view the 48 back-issues in the &lt;a href=&quot;http://www.views-uk.demon.co.uk/Newsletter/backcopy.htm&quot;&gt;archive&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-6974986219253358163?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/mKLAWbuixXg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 12:05:00 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: PROC MEANS Gives You All It's Got (and More!)</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-1834503196635742486</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/Y5QJvbuTljE/note-proc-means-gives-you-all-its-got.html</link>
	<description>An oft overlooked parameter for PROC MEANS (and PROC SUMMARY) is COMPLETETYPES. It tells MEANS to create all possible&amp;nbsp;combinations of the values of the classification variables, even if some of those combinations don't exist in the data. And PRELOADFMT will create combinations from values that don't even exist in your input data. This can be very useful in presenting what appears to be a more complete picture of the input data and can be equally useful in presenting a consistent layout amongst a group of reports (or regularly produced reports).&lt;br /&gt;
&lt;br /&gt;
Here's a simple code example:&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
data sales;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;region = 'North'; product = 'Widget'; sales = 500; OUTPUT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;region = 'North'; product = 'Foobar'; sales = 300; OUTPUT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;region = 'South'; product = 'Widget'; sales = 100; OUTPUT;&lt;br /&gt;
run;&lt;br /&gt;
&lt;br /&gt;
proc means data=sales /*completetypes*/ sum;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;class region product;&lt;br /&gt;
run;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If we run it without COMPLETETYPES we get:&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Analysis Variable : sales&lt;br /&gt;
&lt;br /&gt;
region&amp;nbsp;&amp;nbsp;&amp;nbsp; product&amp;nbsp;&amp;nbsp;&amp;nbsp; Obs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sum&lt;br /&gt;
----------------------------------------&lt;br /&gt;
North&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  Foobar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 300.0000000&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Widget&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 500.0000000&lt;br /&gt;
South&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Widget&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100.0000000&lt;br /&gt;
----------------------------------------&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And if we run it with COMPLETETYPES, we get (with the new information highlighted in &lt;span class=&quot;Apple-style-span&quot;&gt;red&lt;/span&gt;):&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Analysis Variable : sales&lt;br /&gt;
&lt;br /&gt;
region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;product&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Obs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sum&lt;br /&gt;
----------------------------------------&lt;br /&gt;
North&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foobar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;300.0000000&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Widget&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500.0000000&lt;br /&gt;
South&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt;Foobar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Widget&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100.0000000&lt;br /&gt;
----------------------------------------&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;If there's a chance that your data won't contain all possible values for any given classification variable (this is a possibility when you regularly run reports on differing data), you might want to consider PRELOADFMT - it's a key word for the CLASS statement. The formats associated with the CLASS variables are used to tell MEANS the full list of values. See this example (key code highlighted in &lt;span class=&quot;Apple-style-span&quot;&gt;red&lt;/span&gt;):&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
proc format;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;value $regions 'North' = 'North'&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'South' = 'South'&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;Apple-style-span&quot;&gt; 'West' &amp;nbsp;= 'West'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;&lt;br /&gt;
run;&lt;br /&gt;
&lt;br /&gt;
data sales;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt; &amp;nbsp;&amp;nbsp;format region $regions.;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;region = 'North'; product = 'Widget'; sales = 500; OUTPUT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;region = 'North'; product = 'Foobar'; sales = 300; OUTPUT;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;region = 'South'; product = 'Widget'; sales = 100; OUTPUT;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;run;&lt;br /&gt;
&lt;br /&gt;
proc means data=sales completetypes sum ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;class region product &lt;span class=&quot;Apple-style-span&quot;&gt;/ preloadfmt&lt;/span&gt;;&lt;br /&gt;
run;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We define a format for REGION which contains &quot;West&quot;, but West is not in our data at all. We add PRELOADFMT as an option to the CLASS statement, and here's the output that we get (new bits in &lt;span class=&quot;Apple-style-span&quot;&gt;red&lt;/span&gt;):&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;Analysis Variable : sales&lt;br /&gt;
&lt;br /&gt;
region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;product&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Obs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sum&lt;br /&gt;
----------------------------------------&lt;br /&gt;
North&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foobar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;300.0000000&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Widget&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500.0000000&lt;br /&gt;
South&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foobar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Widget&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100.0000000&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot;&gt; West &amp;nbsp; &amp;nbsp; &amp;nbsp;Foobar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Widget &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;br /&gt;
----------------------------------------&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So, we've seen how we can zero-fill a data set using two different techniques, the first using all combinations of data within the input data set, and the second using a pattern of values from format(s).&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;PROC MEANS - CLASSDATA, MISSING&lt;/li&gt;
&lt;li&gt;PROC FREQ - SPARSE&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Sadly, the Summary Statistics task in Enterprise Guide (which&amp;nbsp;uses PROC MEANS) does not offer COMPLETETYPES nor PRELOADFMT; but you can add them yourself within the Code Preview window.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-1834503196635742486?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/Y5QJvbuTljE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 12:00:00 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: More Online Training</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-958255346647602248</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/Uih150WqD4I/note-more-online-training.html</link>
	<description>Having mentioned Sunil's online training and featured his mooted courses in India yesterday, I have to mention Andrew Karp's ever growing &lt;a href=&quot;http://www.sierrainformation.com/seminars.php&quot;&gt;catalog of online and face-to-face courses&lt;/a&gt; at Sierra Information Services. And the &lt;a href=&quot;http://www.virtualsug.org/&quot;&gt;Virtual SAS Users Group&lt;/a&gt; who offer yet more online courses. Sitting alongside the &lt;a href=&quot;http://support.sas.com/training/elearn/&quot;&gt;online courses that SAS offer&lt;/a&gt;, &amp;nbsp;there's a wealth of material waiting for you to sign-up and learn more about the technology and your industry.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-958255346647602248?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/Uih150WqD4I&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 24 Feb 2010 11:35:00 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: Creating a Simple Dashboard in JMP</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/287-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/287-Creating-a-Simple-Dashboard-in-JMP.html</link>
	<description>Business users have been flocking to JMP for its data visualization and analytical capabilities.  You can create a simple dashboard with a minimal amount of scripting. The functions that I will use are: New Window(), H List Box(), and V List Box().&lt;br /&gt;
&lt;br /&gt;
The New Window() command creates a new report window where all of your analyses will be placed. H List Box () and V List Box() allow you to visually arrange analyses horizontally and vertically, respectively. Without specifying H List Box() and/or V List Box(), all analyses will appear stacked on top of each other.&lt;br /&gt;
&lt;br /&gt;
Let’s build a dashboard step by step:&lt;br /&gt;
  &lt;br /&gt;
1. In a new script window, use the following code to open a JMP data table.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt; MyDataTable = Open( &quot;$SAMPLE_DATA/Big Class.jmp&quot; );&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
I am using the Big Class data table found in the JMP sample data directory. However, your path may look something like this: “C:/My JMP Analyses/Favorite JMP Data.jmp”.&lt;br /&gt;
&lt;br /&gt;
2. Create a new report window.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;MyDataTable = Open( &quot;$SAMPLE_DATA/Big Class.jmp&quot; );&lt;br /&gt;
New Window( &quot;Student Report&quot;,  );&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
The New Window() command requires a title, in this case “Student Report,” and a display box which is left empty for now.&lt;br /&gt;
&lt;br /&gt;
3. Add an analysis to the report. I recommend using the point-and-click method to run an analysis and then take the JSL code that was written behind the scenes. Under the Hot Spot (red triangle) of your analysis report, select Script and then Copy Script.  Add the script to your New Window() command as the display box.  I’ve used the Bivariate Analysis.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;MyDataTable = Open( &quot;$SAMPLE_DATA/Big Class.jmp&quot; );&lt;br /&gt;
New Window( &quot;Student Report&quot;, Bivariate( Y( :weight ), X( :height ) ) );&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
4. Add additional analyses by making sure to end each analysis script with a semi-colon. I’ve added Tabulate.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;MyDataTable = Open( &quot;$SAMPLE_DATA/Big Class.jmp&quot; );&lt;br /&gt;
New Window( &quot;Student Report&quot;,  &lt;br /&gt;
	&lt;br /&gt;
	Bivariate( Y( :weight ), X( :height ) );&lt;br /&gt;
	Tabulate(&lt;br /&gt;
		Show Control Panel( 0 ),&lt;br /&gt;
		Add Table(&lt;br /&gt;
			Column Table( Analysis Columns( :height, :weight ), Statistics( Mean ) ),&lt;br /&gt;
			Row Table( Grouping Columns( :sex, :age ) )&lt;br /&gt;
		)&lt;br /&gt;
	);&lt;br /&gt;
	&lt;br /&gt;
);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
5. String together analyses horizontally by using the H List Box() command. Display boxes are strung together using a comma: H List Box(Display Box 1, Display Box 2,…). Similarly, string analyses vertically by using V List Box(Display Box 1, Display Box 2,…);&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt; MyDataTable = Open( &quot;$SAMPLE_DATA/Big Class.jmp&quot; );&lt;br /&gt;
	&lt;br /&gt;
New Window( &quot;Student Report&quot;,  &lt;br /&gt;
&lt;br /&gt;
	H List Box(&lt;br /&gt;
	&lt;br /&gt;
		Bivariate( Y( :weight ), X( :height ) );&lt;br /&gt;
		&lt;br /&gt;
		Tabulate(&lt;br /&gt;
			Show Control Panel( 0 ),&lt;br /&gt;
			Add Table(&lt;br /&gt;
				Column Table( Analysis Columns( :height, :weight ), Statistics( Mean ) ),&lt;br /&gt;
				Row Table( Grouping Columns( :sex, :age ) )&lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. You'll find a sample dashboard with multiple analyses stacked horizontally and vertically in the &lt;a href=&quot;http://www.sas.com/apps/demosdownloads/jmpFileExchange_PROD__sysdep.jsp?packageID=000416&amp;amp;jmpflag=Y&amp;amp;searchvar=userName&amp;amp;searchval=Valerie Hyde&quot;&gt;JMP File Exchange under my name&lt;/a&gt;. Further dashboard customization, such as coloring data points and adding a title, are also found in the example. &lt;br /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 18:43:37 +0000</pubDate>
</item>
<item>
	<title>the SAS-BI blog: The easiest way to generate additional log information for Web Report Studio (3.1 and 4.2)</title>
	<guid>tag:blogger.com,1999:blog-15946403.post-6162411721789394980</guid>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/lApS7xCEFGg/easiest-way-to-generate-additional-log.html</link>
	<description>Ran across a situation last week that proved extremely helpful. We needed to generate detailed logs on Web Report Studio use in order to verify pooling was setup correctly and then to monitor performance of some poor performers. The easiest and most straightforward way to accomplish this was to follow these steps.&lt;br /&gt;
&lt;br /&gt;
1. Verify that the Tester is a member of the WRS Administrator group in SAS Management Console&lt;br /&gt;
2. Log into SAS Web Report Studio&lt;br /&gt;
3. Modify the URL to: /SASWebReportStudio/debugLog.do?LogAllActions=true and hit 'Enter'&lt;br /&gt;
4. You can also change the debug level by modifying the URL to the following format&lt;br /&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; /SASWebReportStudio/debugLog.do?LogName=&lt;em&gt;log.context&lt;/em&gt;&amp;amp;LogLevel=&lt;em&gt;level&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
An example:&lt;br /&gt;
&lt;div&gt;/SASWebReportStudio/debugLog.do?LogName=com.sas.apps.citation&amp;amp;LogLevel=DEBUG&lt;/div&gt;and hit 'Enter'&lt;br /&gt;
5. Continue with testing.&lt;br /&gt;
6. Don't forget to turn off logging before getting out of Web Report Studio&lt;br /&gt;
&lt;div&gt;/SASWebReportStudio/debugLog.do?LogAllActions=false&lt;/div&gt;7. Log off of WRS and retrieve the WebReportStudio.log file&lt;br /&gt;
&lt;br /&gt;
For 3.1 - the reference material is available on pg 110 of &lt;a href=&quot;http://support.sas.com/documentation/configuration/biwaag.pdf&quot;&gt;http://support.sas.com/documentation/configuration/biwaag.pdf&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
For 4.2 - the same instructions apply. See the section 'Configure Debug Logging Dynamically' on page &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/biwaag/63059/HTML/default/a003050065.htm&quot;&gt;http://support.sas.com/documentation/cdl/en/biwaag/63059/HTML/default/a003050065.htm&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/15946403-6162411721789394980?l=sas-bi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/RealBusinessIntelligenceForRealUsers/~4/lApS7xCEFGg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 13:34:28 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: What is a Project?</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-64505188280654384</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/jDCW_4fb1VU/what-is-project.html</link>
	<description>Alongside our &lt;a href=&quot;http://notecolon.blogspot.com/search/label/ExcelGantt&quot;&gt;series of posts on creating Gantt charts in Excel&lt;/a&gt; for the purpose of managing small to medium sized projects, a discussion on &quot;what is a project?&quot; might be useful. Most of us feel we understand the&amp;nbsp;general&amp;nbsp;usage of the term &quot;project&quot;, but what does it&amp;nbsp;mean&amp;nbsp;in the context of Project Management?&lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://dictionary.cambridge.org/define.asp?key=63302&amp;amp;dict=CALD&quot;&gt;Cambridge Advanced Leaner's Dictionary&lt;/a&gt; defines the noun project as &quot;a piece of planned work or an activity which is finished over a period of time and intended to achieve a particular aim&quot;. The key attributes are a) having an aim or purpose, and b) being able to define a start and end date/time. These attributes make projects distinct from ongoing operational, live, production or business as usual (BAU) activities.&lt;br /&gt;
&lt;br /&gt;
The&amp;nbsp;existence&amp;nbsp;of the end date is an important element of the project, and a lot of work goes into agreeing the end date and then making sure the project is delivered/completed by the end date. Plans are drawn-up, often including Gantt charts.&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Projects exist to create something new; something that hasn't been created before. So, we can have a project to create a new business intelligence solution for a new SAS customer, or we can have a project to create a new data mart. Producing a bunch of standard reports every week is not a project, but the task of producing the reports for an individual week might be considered a&amp;nbsp;project&amp;nbsp;because it has a defined aim and a defined end date.&lt;br /&gt;
&lt;br /&gt;
An important element of project planning is to be sure that everybody understands what &quot;finished&quot; means, and what it looks like. Does your development project finish when your code is successfully tested and goes live, or will their be a &quot;warranty period&quot; wherein the development team will be on-hand to investigate and resolve problems quickly, or does all of the user training need to be delivered too?&lt;br /&gt;
&lt;br /&gt;
It is the responsibility of everybody involved with the project to make themselves aware of the full set of deliverables and the dates by which they should be delivered. And it is every team member's&amp;nbsp;responsibility&amp;nbsp;to focus on achieving these deliveries on-time, on-budget, and with the expected degree of quality.&lt;br /&gt;
&lt;br /&gt;
I should add that sometimes projects finish before they have delivered their aims. It is good practice to monitor progress throughout the life of the project, but it's also good practice to review whether the aim is still&amp;nbsp;achievable&amp;nbsp;and whether the expected benefits will still accrue as a result. If you have a multi-year project aimed at producing a new, improved widget yet (since you started your project) the world has discovered that foobars are preferable and everybody's getting rid of their widgets, you better give serious consideration to canning your project (or resetting its aims, or increasing the marketing budget for your widgets!).&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-64505188280654384?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/jDCW_4fb1VU&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 13:18:17 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - Adding Dates</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-6658413447988440359</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/ox6MaJPBzzg/project-plans-in-excel-adding-dates.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHwjIiPBI/AAAAAAAAAM0/e9En1XBoQSk/s1600/XlsPP_B3.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;73&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHwjIiPBI/AAAAAAAAAM0/e9En1XBoQSk/s200/XlsPP_B3.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;In&amp;nbsp;the previous post in &lt;a href=&quot;http://notecolon.blogspot.com/search/label/ExcelGantt&quot;&gt;this series&lt;/a&gt; I described how to use Conditional Formatting to &lt;a href=&quot;http://notecolon.blogspot.com/2010/02/project-plans-in-excel-simple-quick-and.html&quot;&gt;create a neat and simple Gantt chart&lt;/a&gt; alongside a simple Excel-based project plan. In this post I’ll describe how to use dates in addition to the day numbers that were featured in the previous post. The picture alongside (right) shows the result from today's post.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHLmRepvI/AAAAAAAAAMk/grZpIGb3oEc/s1600-h/XlsPP_A4.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;49&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHLmRepvI/AAAAAAAAAMk/grZpIGb3oEc/s200/XlsPP_A4.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;As with the previous case, I’m going to describe a quick and simple method. This method also takes weekends into account as non-working days.&amp;nbsp;We ended the last post with what you see alongside (left).&lt;br /&gt;
&lt;br /&gt;
So, let’s begin by adding the date for day 1 into cell F1. I'm typing “22/2” to represent 22nd February). It’s not readable in the small width of the cell, so we’ll go to the Format Cells window (you can use Ctrl-1 to get there quickly) and select text orientation as 90 degrees. Then, to get the date format that we want, we’ll stay in the Format Cells window and specify a custom number format of “dd-mmm (ddd)”. If the height of row 1 doesn’t automatically increase for you, just do it manually. You should have a result like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHgkrmySI/AAAAAAAAAMs/P0nQuxwGjCg/s1600-h/XlsPP_B2.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;145&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHgkrmySI/AAAAAAAAAMs/P0nQuxwGjCg/s400/XlsPP_B2.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
Now, let’s set G2 as =F1+1 and copy the formatting from F1. This gives us the correct result for G2, but it’s not a sequence that we can ask Excel to follow because we’ll get weekends included, so we should set the formula for G2 to =IF(WEEKDAY(F1)&amp;lt;&amp;gt;6,F1+1,F1+3). In other words, if the previous day is not a Friday, just add 1 to the date; if it is Friday, add three to the date. We can copy and paste G2 across the remainder of the row:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHwjIiPBI/AAAAAAAAAM0/e9En1XBoQSk/s1600-h/XlsPP_B3.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/_FBkMa5T6s6k/S3sHwjIiPBI/AAAAAAAAAM0/e9En1XBoQSk/s320/XlsPP_B3.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So, with very little effort, we have a Gantt chart with day numbers and dates.&lt;br /&gt;
&lt;br /&gt;
In one further posting I’ll describe how to add groups of tasks and how to summarise them.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-6658413447988440359?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/ox6MaJPBzzg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 13:17:03 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel (simple, quick and effective)</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-5869204274940902198</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/6TiqN9lt0rM/project-plans-in-excel-simple-quick-and.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3urF4FKlyI/AAAAAAAAAM8/EzoYtloPqXk/s1600-h/XlsPP_A4.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;49&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3urF4FKlyI/AAAAAAAAAM8/EzoYtloPqXk/s200/XlsPP_A4.JPG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;For any piece of work other than the smallest, it’s worth planning. Planning doesn’t have to mean creating a huge monster in Microsoft Project - I find that Microsoft Excel (or similar) is often sufficient (and a lot more accessible to the team). This post (and the &lt;a href=&quot;http://notecolon.blogspot.com/search/label/ExcelGantt&quot;&gt;series of posts&lt;/a&gt; that follow) describes how to quickly and efficiently create an adequate plan for small to medium sized projects.&lt;br /&gt;
&lt;br /&gt;
I don't expect all developers to be expert project managers, but I do expect my team members to understand the role of the project manager, to know how to work to a plan, and to focus on delivery. And I do expect developers to run their own (small to medium sized) projects from time-to-time.&lt;br /&gt;
&lt;br /&gt;
A project plan can consist of just a list of tasks (preferably with start and end dates) together with the name of the person who will complete the task, but this can be made to communicate a lot more if you can deliver a &lt;a href=&quot;http://en.wikipedia.org/wiki/Gantt_chart&quot;&gt;Gantt Chart&lt;/a&gt;&amp;nbsp;too. The name “Gantt Chart” sounds challenging to anybody who hasn’t met one before, but actually it’s rather simple format that most people are familiar with (often without knowing the name). Gantt Charts can contain a lot of detail and embellishment, but I’m going to describe how to create a simple yet communicative chart very quickly.&lt;br /&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;br /&gt;
To illustrate what to do, I’ll use Microsoft Excel 2002, conditional formatting, and formulae.&lt;br /&gt;
&lt;br /&gt;
Let’s start by creating the basic list of tasks, their start dates, and their durations (I’ll ignore the name of the actionee in order to save space):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3sDhQM4WsI/AAAAAAAAAME/l5Dw7WB3feI/s1600-h/XlsPP_A1.JPG&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3sDhQM4WsI/AAAAAAAAAME/l5Dw7WB3feI/s320/XlsPP_A1.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
We can add a formula to calculate the end date: d3 set to =B3+C3-1, etc.&lt;br /&gt;
&lt;br /&gt;
Next, let’s add columns for the days of our Gantt:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3sEMdCgw1I/AAAAAAAAAMM/duI5qJ5ygvk/s1600-h/XlsPP_A2.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;111&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3sEMdCgw1I/AAAAAAAAAMM/duI5qJ5ygvk/s400/XlsPP_A2.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
To create our Gantt, we want to create solid-coloured cells where the day number (in row 2) lies between or equal to the start and end days respectively. To do this we will use Conditional Formatting. From cell F3 we need the following Conditional Formatting (accessed from the Format menu in Excel 2002):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S3sE0aNBoCI/AAAAAAAAAMU/fa4cck6xXd0/s1600-h/XlsPP_A3.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;125&quot; src=&quot;http://4.bp.blogspot.com/_FBkMa5T6s6k/S3sE0aNBoCI/AAAAAAAAAMU/fa4cck6xXd0/s400/XlsPP_A3.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In addition, we’ve used the Format button to set the pattern for the cell shading to solid green. And, having clicked OK, we see that cell F3 turns green, reflecting the fact that activity #1 is to be performed on day 1.&lt;br /&gt;
&lt;br /&gt;
We now need to copy this formatting to all of the other cells of the Gantt, but if we copy and paste we’ll get the wrong results because the cell references will be move relative to the point where we paste the formatting. So, we need to change the formula to tell Excel which bits of the formula should move when we copy/paste, and which bits should be fixed. The modified formula is: =IF(AND($B3&amp;lt;=F$2,F$2&amp;lt;=$D3),1,0)&lt;br /&gt;
&lt;br /&gt;
Armed with the correct formula, we can use the format painter to copy the formatting, or we can use Copy and then Paste Special. Either way, having done so we will see the end result:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3sFh-3mUDI/AAAAAAAAAMc/DwiVdcH7fjo/s1600-h/XlsPP_A4.JPG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;98&quot; src=&quot;http://3.bp.blogspot.com/_FBkMa5T6s6k/S3sFh-3mUDI/AAAAAAAAAMc/DwiVdcH7fjo/s400/XlsPP_A4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
That’s a simple, quick, but communicative Gantt chart. In&amp;nbsp;subsequent posts I’ll describe how to quickly translate day numbers into dates, how to add grouping of tasks, and how to indicate progress (% done).&lt;br /&gt;
&lt;br /&gt;
What I have described is just one of many routes to the same end. There are plenty of resources on the web to guide you to a similar result (or better) with Microsoft software and with others. Plus, SAS/OR offers plenty of project management functionality, including Gantt charts from PROC GANTT.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-5869204274940902198?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/6TiqN9lt0rM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 13:12:17 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: New Course in India: Best Practices in SAS Statistical Programming for Regulatory Submission</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-3474847298138565676</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/UClcG4UIvJQ/note-new-course-in-india-best-practices.html</link>
	<description>Having successfully conducted his long-titled course in the USA, Netherlands, and online, my friend &lt;a href=&quot;http://guptaprogramming.com/&quot;&gt;Sunil Gupta&lt;/a&gt; is considering the possibility of running it in one or two cities in India. While the schedule is not yet finalised, the favoured period for the two-day class is around April end/early May in Bangalore and maybe Hyderabad. &lt;br /&gt;
&lt;br /&gt;
For further details of the course, see the &lt;a href=&quot;http://www.cfpa.com/190001012214-16a/2214/o/courseSummary.aspx&quot;&gt;overview of the online version&lt;/a&gt;. To register interest in the Indian course(s), &lt;a href=&quot;mailto:sunil@guptaprogramming.com&quot;&gt;email Sunil&lt;/a&gt; directly (and tell him &lt;span class=&quot;Apple-style-span&quot;&gt;NOTE:&lt;/span&gt; sent you!).&lt;br /&gt;
&lt;br /&gt;
You might also like to know that Sunil is presenting his &quot;Preparing SAS Programmers for the Pharmaceutical Industry (An Introduction)&quot; course as a &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/sunday.html#sg&quot;&gt;pre-conference course&lt;/a&gt; at&amp;nbsp;SAS Global Forum (SGF) 2010. There may still be places available.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-3474847298138565676?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/UClcG4UIvJQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 11:30:00 +0000</pubDate>
</item>
<item>
	<title>The Princess of Science: ‫The Simpson‬</title>
	<guid>http://www.sci-princess.info/?p=1028</guid>
	<link>http://feedproxy.google.com/~r/sci-princess/~3/l5TjwNOo1t0/1028</link>
	<description>&amp;#8235;במשחק השביעי והמכריע בסדרת גמר אליפות הכדורסל הארצית, התמודדה קבוצת ספרינגפילד בולס מול יריבתה המושבעת, קבוצת יוטה סופרגז. כצפוי, המשחק הוכרע על פי היכולות האישיות של כוכבי שתי הקבוצות: בארט מספרינגפילד ויוחנן מיוטה. במחצית הראשונה היו לבארט 40% אחוזי קליעה מהשדה, בעוד שיוחנן צלף ב- 50% מנסיונות הקליעה שלו.  במחצית השניה צפינו בהתעלות אישית של [...]&amp;#8236;</description>
	<pubDate>Tue, 23 Feb 2010 10:09:04 +0000</pubDate>
</item>
<item>
	<title>Key Happenings at support.sas.com: SAS gets your attention with a text message!</title>
	<guid>http://blogs.sas.com/supportnews/index.php?/archives/100-guid.html</guid>
	<link>http://feedproxy.google.com/~r/UpdatesInSasOnlineSupport/~3/amK4BxJ7TYc/index.php</link>
	<description>&lt;font size=&quot;-2&quot;&gt;Contributed by Scott Vodicka, a member of the SAS Global Consulting Business Intelligence Practice&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
An interesting topic came up the other day in one of my email conversations. What was the topic of the email? Well, I am glad you asked. It was how do we send text messages from SAS to someone's cell phone?&lt;br /&gt;
&lt;br /&gt;
It is so easy that you will not even believe it!  As a lot of us know SAS supports sending emails from a data step program, and the publish and subscribe model supports delivering information via email.  The quick answer is to use the email address of the person's phone in the TO: field for the data step, or the email address used to subscribe to a channel.&lt;br /&gt;
&lt;br /&gt;
So, now that the easy part is done, let me give you some information that will help you solve the problem I know you are now facing: How do I determine the users email address for their phone?  There are a couple of tricks that make this really easy.&lt;br /&gt;
&lt;br /&gt;
Below is a short list of popular carriers with their associated domains:&lt;br /&gt;
&amp;#160;&amp;#160;AT&amp;amp;T:  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @txt.att.net &lt;br /&gt;
&amp;#160;&amp;#160;Alltel:  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;@message.alltel.com &lt;br /&gt;
&amp;#160;&amp;#160;Sprint:  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;@messaging.sprintpcs.com &lt;br /&gt;
&amp;#160;&amp;#160;T-Mobile:  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;@tmomail.net &lt;br /&gt;
&amp;#160;&amp;#160;Verizon:  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; @vtext.com&lt;br /&gt;
&amp;#160;&amp;#160;Virgin Mobile:  &amp;#160;&amp;#160;&amp;#160; @vmobl.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check out these web sites for updated information on carriers, especially since this sector is constantly in flux.  &lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://blogs.sas.com/supportnews/exit.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX2NhcnJpZXJzX3Byb3ZpZGluZ19TTVNfdHJhbnNpdA==&amp;amp;entry_id=100&quot; title=&quot;Email to SMS Gateway List&quot;&gt;http://en.wikipedia.org/wiki/List_of_carriers_providing_SMS_transit&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.sas.com/supportnews/exit.php?url=aHR0cDovL2VkZ2VkaXJlY3Rvci5jb20vaHRtL3BhZ2UuaHRt&amp;amp;entry_id=100&quot; title=&quot;EdgeDirector.com&quot;&gt;http://edgedirector.com/htm/page.htm&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
If your phone number is: &lt;strong&gt;(919) 555-1234&lt;/strong&gt;  (not a valid number), and your carrier is AT&amp;amp;T then the email address for your phone is: &lt;strong&gt;9195551234@txt.att.net&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Another way to find out your phone's address is to send a text message from your phone to your SAS email account:  and you’ll get the email address for your phone in the from field (it might go to your junk folder).&lt;br /&gt;
&lt;br /&gt;
Here is a sample data step program that sends an alert as a text message to a user's cell phone. Before you submit the program below be sure to update your SAS configuration file for the following options:&lt;br /&gt;
&lt;code&gt;EMAILSYS &amp;#160;EMAILHOST &amp;#160;EMAILID &amp;#160;&lt;/code&gt; &lt;br /&gt;
&lt;br /&gt;
You may have to supply the &lt;code&gt;EMAILPW&lt;/code&gt; value depending on how your SMTP server is configured.  You may specify the &lt;code&gt;EMAILID&lt;/code&gt; and &lt;code&gt;EMAILPW&lt;/code&gt; values in your SAS program via an options statement.  See SAS documentation for details.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;%let email_alert=&quot;9195551234@txt.att.net&quot;;&lt;br /&gt;
%let email_from=&quot;SAS Monitoring System &quot;;&lt;br /&gt;
&lt;br /&gt;
%let errormsg=Server failed to start;&lt;br /&gt;
%let host=metadata_server;&lt;br /&gt;
&lt;br /&gt;
filename em_out email to=(&amp;amp;email_alert) from=(&amp;amp;email_from) &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;subject=&quot;Alert: SAS 9.2 Critical Status Error&quot;;&lt;br /&gt;
data _null_;&lt;br /&gt;
&amp;#160;&amp;#160;file em_out;&lt;br /&gt;
&amp;#160;&amp;#160;format timechar $21.;&lt;br /&gt;
&amp;#160;&amp;#160;timechar=put(datetime(),datetime21.2);&lt;br /&gt;
&amp;#160;&amp;#160;put timechar &quot;ERROR : &amp;amp;sysuserid.@&amp;amp;host - &amp;amp;errormsg..&quot;;&lt;br /&gt;
run;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Important Note:&lt;/strong&gt;  Many people are charged per text message. Be sure to get permission before sending a text message to an individual.&lt;br /&gt;
 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/UpdatesInSasOnlineSupport/~4/amK4BxJ7TYc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 22 Feb 2010 19:01:42 +0000</pubDate>
</item>
<item>
	<title>SAS Global Forum: “Enormous Power at my Fingertips”</title>
	<guid>http://blogs.sas.com/sgf/index.php?/archives/97-guid.html</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/_L8KhawHl2s/index.php</link>
	<description>Last month I pointed you towards the conference &lt;a href=&quot;http://www.sascommunity.org/wiki/SAS_TShirt_Contest&quot;&gt;t-shirt contest &lt;/a&gt;on sasCommunity.org.   The designs and coding techniques on display were quite creative, and the contest triggered some fun conversation among community members.   Now the votes have been cast.  &lt;br /&gt;
&lt;br /&gt;
And the winner is …self-proclaimed “new kid” Lynne Krajevski. I loved what she had to say about her unique design: “SAS is enormous power at my fingertips, always within my reach - this is what I was trying to convey with my design.”  Way to go Lynne!  &lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;300&quot; height=&quot;253&quot; src=&quot;http://blogs.sas.com/sgf/uploads/winningt-shirt.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
How can you get one of these limited number t-shirts?   Come to &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2010/index.html&quot;&gt;SAS Global Forum 2010 &lt;/a&gt;in Seattle to find out!&lt;br /&gt;
 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/_L8KhawHl2s&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 22 Feb 2010 14:43:00 +0000</pubDate>
</item>
<item>
	<title>JMP Blog: Saving Graphs, Tables and Reports in JMP</title>
	<guid>http://blogs.sas.com/jmp/index.php?/archives/286-guid.html</guid>
	<link>http://blogs.sas.com/jmp/index.php?/archives/286-Saving-Graphs,-Tables-and-Reports-in-JMP.html</link>
	<description>Here are some simple ways to save both tabular output and/or graphs in JMP.&lt;br /&gt;
&lt;br /&gt;
When you copy information from JMP, you can either use “Copy” from the Edit menu or the tool bar. The copied information is copied to an active windows clip board.&lt;br /&gt;
&lt;br /&gt;
1. If you want to save the whole report output with graphs, simply choose Edit/Copy to store the active window to the clipboard and then paste the results in your document. &lt;br /&gt;
&lt;br /&gt;
2. You can save just a portion of the results by choosing the “fat-plus&quot; tool from the toolbar (or &lt;strong&gt;Tools&gt;Selection)&lt;/strong&gt; and then clicking on the table, column or graph you would like save. You then copy and paste as before.  &lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;285&quot; height=&quot;52&quot; src=&quot;http://blogs.sas.com/jmp/uploads/selectiontool.JPG&quot; alt=&quot;selection tool in JMP&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
a. From any JMP output window, click on the selection tool in the toolbar (the fat plus)&lt;br /&gt;
b. Click on the content you’d like to copy – the selected content is highlighted.  To extend a selection, hold the Shift key&lt;br /&gt;
c. Click &lt;strong&gt;Edit&gt;Copy&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;356&quot; height=&quot;449&quot; src=&quot;http://blogs.sas.com/jmp/uploads/savinggraphs.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
d. Open the program where you’d like to paste the content and select &lt;strong&gt;Paste&gt;Paste Special.&lt;/strong&gt;  From the list, select &lt;strong&gt;Picture (Enhanced Metafile).&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
By selecting &lt;strong&gt;Picture (Enhanced Metafile), &lt;/strong&gt;you have the ability to grow and shrink the image, ungroup the image for manipulation. This options also takes up less storage space.  &lt;br /&gt;
&lt;br /&gt;
Once the image has been pasted in your application, if you right-click within the image and select Edit Picture, you then have the ability to manipulate that image.&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;387&quot; height=&quot;294&quot; src=&quot;http://blogs.sas.com/jmp/uploads/savinggraphs2.JPG&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
3. JMP also provides methods that allow you to customize report output and save it as a graphic, text, Word, .rtf, or .html. The text format is the only format that doesn't save graphs. Select &lt;strong&gt;File&gt;Save as&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
4. You can also save selected graphs or tables by choosing &lt;strong&gt;Edit&gt;Save Selection As&lt;/strong&gt;. This option only allows you to save the selected item as graphics with an extension .png, .jpg, .svg, .gif or .wmf &lt;br /&gt;
&lt;br /&gt;
5. You cannot save output directly from the report; instead, you must duplicate it by selecting &lt;strong&gt;Edit&gt;Journal&lt;/strong&gt; or &lt;strong&gt;Edit&gt;Layout&lt;/strong&gt;. Both commands will reproduce the report in a new window and allow you to customize the look of the report. The layout option provides a few more editing options, such as allowing you to ungroup parts of a report. Select File/Save and choose a format above to save a journal or layout window.&lt;br /&gt;
&lt;br /&gt;
To learn more about saving data tables, graphics and reports, refer to Chapter 4 of the User Guide in JMP: “Saving Data Reports and Sessions.”</description>
	<pubDate>Mon, 22 Feb 2010 14:24:00 +0000</pubDate>
</item>

</channel>
</rss>
