<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://www.sascommunity.org/planet/">
	<title>SAS Community Planet</title>
	<link>http://www.sascommunity.org/planet/</link>
	<description>SAS Community Planet - http://www.sascommunity.org/planet/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/285-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-2315822260943695633.post-4140632547986664891" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/291-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-3405695519294021522" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-15946403.post-4724139625345383283" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-6398818464872578362" />
			<rdf:li rdf:resource="http://blogs.sas.com/sasdummy/index.php?/archives/156-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/290-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/289-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/sgf/index.php?/archives/99-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/sgf/index.php?/archives/98-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/sasdummy/index.php?/archives/155-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-20769129.post-5077661394377268046" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-15946403.post-2283666577701741673" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-1116546449646002174.post-5249387818231246121" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-6162464564771989170" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-8946927753424271978" />
			<rdf:li rdf:resource="http://blogs.sas.com/supportnews/index.php?/archives/101-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-4501439582159843540" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/288-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-15946403.post-5797520059090882357" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-20769129.post-2784811511962246279" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-2922323399855835697" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-2895587182950525748" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-2985745247442617647" />
			<rdf:li rdf:resource="http://digg.com/programming/MedDRA_and_WHODrug_Coding_StudySAS_Blog" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-15946403.post-5735349824375021037" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-352401125712727743" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-7473851204863289851" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-6974986219253358163" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-1834503196635742486" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-958255346647602248" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/287-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-15946403.post-6162411721789394980" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-64505188280654384" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-6658413447988440359" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-5869204274940902198" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-3474847298138565676" />
			<rdf:li rdf:resource="http://www.sci-princess.info/?p=1028" />
			<rdf:li rdf:resource="http://blogs.sas.com/supportnews/index.php?/archives/100-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/sgf/index.php?/archives/97-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/286-guid.html" />
			<rdf:li rdf:resource="http://blogs.sas.com/sasdummy/index.php?/archives/154-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-2534747842362314412" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-1690370505141138201" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-4520388292864045677" />
			<rdf:li rdf:resource="http://www.sci-princess.info/?p=1025" />
			<rdf:li rdf:resource="http://blogs.sas.com/sasdummy/index.php?/archives/153-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-1116546449646002174.post-6067048252343575787" />
			<rdf:li rdf:resource="http://digg.com/programming/SAS_Tip_Assigning_a_flag_with_value_1_or_0_to_variable" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-5054603230553339697" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-1726216218530168963" />
			<rdf:li rdf:resource="http://blogs.sas.com/jmp/index.php?/archives/283-guid.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-3401137187963845372.post-9173556979168820862" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-29815492.post-7110724578219671312" />
			<rdf:li rdf:resource="http://digg.com/programming/How_to_check_if_File_is_exist_or_not_in_SAS_StudySAS_Blog" />
			<rdf:li rdf:resource="http://digg.com/programming/Renaming_Variables_Using_the_SASHELP_Views_StudySAS_Blog" />
			<rdf:li rdf:resource="http://digg.com/programming/Length_of_Numeric_variables_GT_8_in_SAS_StudySAS_BLOG" />
			<rdf:li rdf:resource="http://digg.com/programming/A_Sampler_of_What_s_New_in_Base_SAS_9_2_StudySAS_Blog" />
			<rdf:li rdf:resource="http://digg.com/programming/Using_ODS_to_Create_Customised_Output_StudySAS_Blog" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/285-guid.html">
	<title>JMP Blog: Visual Data Quality with Named Colors in JMP, Part 2</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/285-Visual-Data-Quality-with-Named-Colors-in-JMP,-Part-2.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-10T18:29:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-2315822260943695633.post-4140632547986664891">
	<title>StudySAS Blog: $UPCASEw. format</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/R9120V9ut_Q/upcasew-format.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-10T17:37:36+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/291-guid.html">
	<title>JMP Blog: Changing JMP Graph and Selected Text Colors (for Windows OS)</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/291-Changing-JMP-Graph-and-Selected-Text-Colors-for-Windows-OS.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-09T14:00:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-3405695519294021522">
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - Tracking to Completion</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/guxnY5iG5yk/project-plans-in-excel-tracking-to.html</link>
	<content:encoded>&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;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;</content:encoded>
	<dc:date>2010-03-09T11:50:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-15946403.post-4724139625345383283">
	<title>the SAS-BI blog: Alert Notification from BI Dashboard 4.2? Include EMAIL Addresses in User Manager</title>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/52WvS42CgfQ/alert-notification-from-bi-dashboard-42.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-08T09:00:02+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-6398818464872578362">
	<title>SAS Programming: An efficient macro for Stumps-Recursive Partition weak classifier</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/5pZf-0aC1Oo/efficient-macro-for-stumps-recursive.html</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/RiC7luUFzIim3U35JuRk-gidfTw/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/RiC7luUFzIim3U35JuRk-gidfTw/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/RiC7luUFzIim3U35JuRk-gidfTw/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/RiC7luUFzIim3U35JuRk-gidfTw/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-Recursive Partition, 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_&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&gt;0.5); c_R=(p1_RH&gt;0.5);
    end;
       end;
     end;  
     do i=1 to &amp;amp;ntotal
        if _x[i]=xmin then y_pred=c_L;
        if _x[i]&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;</content:encoded>
	<dc:date>2010-03-05T17:55:57+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sasdummy/index.php?/archives/156-guid.html">
	<title>The SAS Dummy: Just testing!</title>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/1Zue92hBldQ/index.php</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-05T15:57:43+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/290-guid.html">
	<title>JMP Blog: Quick Reference Card</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/290-Quick-Reference-Card.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-04T20:28:36+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/289-guid.html">
	<title>JMP Blog: See You at SAS Global Forum</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/289-See-You-at-SAS-Global-Forum.html</link>
	<content:encoded>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!</content:encoded>
	<dc:date>2010-03-04T16:17:29+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sgf/index.php?/archives/99-guid.html">
	<title>SAS Global Forum: SAS CEO Jim Goodnight Extends Special Invitation</title>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/s5cOhvUXsfs/index.php</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-03T21:23:00+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sgf/index.php?/archives/98-guid.html">
	<title>SAS Global Forum: Michael Raithel's plans for SAS Global Forum</title>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/Ucfb9QzfiEY/index.php</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-03T20:57:00+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sasdummy/index.php?/archives/155-guid.html">
	<title>The SAS Dummy: SAS: The . Manual</title>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/-P3HLv5HEYY/index.php</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-03T13:32:37+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-20769129.post-5077661394377268046">
	<title>SAS from Out in Left Field: SaviDataSet 1.0.0.5 Released</title>
	<link>http://savian.blogspot.com/2010/03/savidataset-1005-released.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-03T13:27:23+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-15946403.post-2283666577701741673">
	<title>the SAS-BI blog: Addressing Security at the Root - BI Dashboard 4.2 Tips</title>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/PNI3C5E8AAM/addressing-security-at-root-bi.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-03T09:01:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-1116546449646002174.post-5249387818231246121">
	<title>Jurassic SAS in the BI/EBI World: HTML, PDF, RTF (and more) all at the same time.</title>
	<link>http://hcsbi.blogspot.com/2010/03/html-pdf-rtf-and-more-all-at-same-time.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-03T07:10:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-6162464564771989170">
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - Grouping Tasks</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/aJ7oRMLs3HM/project-plans-in-excel-grouping-tasks.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-02T20:20:51+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-8946927753424271978">
	<title>NOTE: The blog of RTSL.eu: NOTE: Data Set Reader and Log Analyser from Oceanview</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/rqTWy7r_vBM/note-data-set-reader-and-log-analyser.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-02T20:08:17+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/supportnews/index.php?/archives/101-guid.html">
	<title>Key Happenings at support.sas.com: Referring to SAS and its products</title>
	<link>http://feedproxy.google.com/~r/UpdatesInSasOnlineSupport/~3/xcaVz9vWaMQ/index.php</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-02T19:10:51+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-4501439582159843540">
	<title>NOTE: The blog of RTSL.eu: NOTE: Don Henderson Has a Blog</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/lJYq2Fr2CYk/note-don-henderson-has-blog.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-03-02T12:00:06+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/288-guid.html">
	<title>JMP Blog: Credit Cards: A Method Behind the Madness</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/288-Credit-Cards-A-Method-Behind-the-Madness.html</link>
	<content:encoded>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.</content:encoded>
	<dc:date>2010-03-01T14:00:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-15946403.post-5797520059090882357">
	<title>the SAS-BI blog: Quick Preview of Gauges and Additional Settings Available in BI Dashboard (4.2)</title>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/46HrnabHYXY/quick-preview-of-gauges-and-additional.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-01T09:00:13+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-20769129.post-2784811511962246279">
	<title>SAS from Out in Left Field: SaviDataSet Alpha 1.0 On the Web</title>
	<link>http://savian.blogspot.com/2010/02/savidataset-alpha-10-on-web.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-01T07:24:17+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-2922323399855835697">
	<title>SAS Programming: AUC calculation using Wilcoxon Rank Sum Test</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/dQY0VY7K95s/auc-calculation-using-wilcoxon-rank-sum.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-01T03:02:23+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-2895587182950525748">
	<title>SAS Programming: Partial Least Square</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/VqTvDcVPOwQ/partial-least-square.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-03-01T03:01:28+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-2985745247442617647">
	<title>SAS Programming: SAS implementation of Kernel PCA</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/fde1uilIGYk/sas-implementation-of-kernel-pca.html</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/rKPc-iZZPEUnRloF9G5XfSNmMPY/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/rKPc-iZZPEUnRloF9G5XfSNmMPY/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/rKPc-iZZPEUnRloF9G5XfSNmMPY/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/rKPc-iZZPEUnRloF9G5XfSNmMPY/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;

/* get U by applying U=XV/S */
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;

/* get U by applying U=XV/S */
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;</content:encoded>
	<dc:date>2010-03-01T03:01:16+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/MedDRA_and_WHODrug_Coding_StudySAS_Blog">
	<title>StudySAS Blog: MedDRA and WHODrug Coding | StudySAS Blog [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/uLBEfTqxIz8/MedDRA_and_WHODrug_Coding_StudySAS_Blog</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-26T20:55:25+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-15946403.post-5735349824375021037">
	<title>the SAS-BI blog: Improve Web Report Studio Performance by Carefully Choosing Processing Locations</title>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/HJErEC4_V0Y/improve-web-report-studio-performance.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-25T09:00:10+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-352401125712727743">
	<title>NOTE: The blog of RTSL.eu: NOTE: Successes and Tools</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/U_ik1Cr2G60/note-successes-and-tools.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-24T22:25:41+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-7473851204863289851">
	<title>NOTE: The blog of RTSL.eu: NOTE: Success Demonstrates BI Scope (the BI evolution)</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/gqE6TuXEv6I/note-success-demonstrates-bi-scope-bi.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-24T21:45:51+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-6974986219253358163">
	<title>NOTE: The blog of RTSL.eu: NOTE: Issue 49 of VIEWS News is Available</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/mKLAWbuixXg/note-issue-49-of-views-news-is.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-24T12:05:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-1834503196635742486">
	<title>NOTE: The blog of RTSL.eu: NOTE: PROC MEANS Gives You All It's Got (and More!)</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/Y5QJvbuTljE/note-proc-means-gives-you-all-its-got.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-24T12:00:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-958255346647602248">
	<title>NOTE: The blog of RTSL.eu: NOTE: More Online Training</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/Uih150WqD4I/note-more-online-training.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-24T11:35:00+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/287-guid.html">
	<title>JMP Blog: Creating a Simple Dashboard in JMP</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/287-Creating-a-Simple-Dashboard-in-JMP.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-23T18:43:37+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-15946403.post-6162411721789394980">
	<title>the SAS-BI blog: The easiest way to generate additional log information for Web Report Studio (3.1 and 4.2)</title>
	<link>http://feedproxy.google.com/~r/RealBusinessIntelligenceForRealUsers/~3/lApS7xCEFGg/easiest-way-to-generate-additional-log.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-23T13:34:28+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-64505188280654384">
	<title>NOTE: The blog of RTSL.eu: What is a Project?</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/jDCW_4fb1VU/what-is-project.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-23T13:18:17+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-6658413447988440359">
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel - Adding Dates</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/ox6MaJPBzzg/project-plans-in-excel-adding-dates.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-02-23T13:17:03+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-5869204274940902198">
	<title>NOTE: The blog of RTSL.eu: Project Plans in Excel (simple, quick and effective)</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/6TiqN9lt0rM/project-plans-in-excel-simple-quick-and.html</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-02-23T13:12:17+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-3474847298138565676">
	<title>NOTE: The blog of RTSL.eu: NOTE: New Course in India: Best Practices in SAS Statistical Programming for Regulatory Submission</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/UClcG4UIvJQ/note-new-course-in-india-best-practices.html</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-23T11:30:00+00:00</dc:date>
</item>
<item rdf:about="http://www.sci-princess.info/?p=1028">
	<title>The Princess of Science: ‫The Simpson‬</title>
	<link>http://feedproxy.google.com/~r/sci-princess/~3/l5TjwNOo1t0/1028</link>
	<content:encoded>&amp;#8235;במשחק השביעי והמכריע בסדרת גמר אליפות הכדורסל הארצית, התמודדה קבוצת ספרינגפילד בולס מול יריבתה המושבעת, קבוצת יוטה סופרגז. כצפוי, המשחק הוכרע על פי היכולות האישיות של כוכבי שתי הקבוצות: בארט מספרינגפילד ויוחנן מיוטה. במחצית הראשונה היו לבארט 40% אחוזי קליעה מהשדה, בעוד שיוחנן צלף ב- 50% מנסיונות הקליעה שלו.  במחצית השניה צפינו בהתעלות אישית של [...]&amp;#8236;</content:encoded>
	<dc:date>2010-02-23T10:09:04+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/supportnews/index.php?/archives/100-guid.html">
	<title>Key Happenings at support.sas.com: SAS gets your attention with a text message!</title>
	<link>http://feedproxy.google.com/~r/UpdatesInSasOnlineSupport/~3/amK4BxJ7TYc/index.php</link>
	<content:encoded>&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;</content:encoded>
	<dc:date>2010-02-22T19:01:42+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sgf/index.php?/archives/97-guid.html">
	<title>SAS Global Forum: “Enormous Power at my Fingertips”</title>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/_L8KhawHl2s/index.php</link>
	<content:encoded>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;</content:encoded>
	<dc:date>2010-02-22T14:43:00+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/286-guid.html">
	<title>JMP Blog: Saving Graphs, Tables and Reports in JMP</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/286-Saving-Graphs,-Tables-and-Reports-in-JMP.html</link>
	<content:encoded>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.”</content:encoded>
	<dc:date>2010-02-22T14:24:00+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sasdummy/index.php?/archives/154-guid.html">
	<title>The SAS Dummy: Is your database on your platform supported by your version of SAS?</title>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/OgEvcYKV6wA/index.php</link>
	<content:encoded>Which versions of MySQL are supported by SAS 9.1.3 for Windows?  Is the 64-bit version of Oracle 11g supported on the 64-bit version of SAS 9.2 on Linux?  You can find the answers to these questions and others like it by consulting the &lt;a href=&quot;http://support.sas.com/matrix/list?SAS=All&amp;amp;Engine=All&amp;amp;OS=All&amp;amp;googleTrack=on&quot; title=&quot;SAS/ACCESS validation matrix&quot;&gt;SAS/ACCESS Validation Matrix&lt;/a&gt;: pick your SAS version, your database, and your architecture and -- BAM! -- get your answer in no time flat.&lt;br /&gt;
&lt;br /&gt;
 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/OgEvcYKV6wA&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-22T14:06:09+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-2534747842362314412">
	<title>NOTE: The blog of RTSL.eu: NOTE: Enterprise Guide Add-Ins Are Out There</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/a5lLl08nAh4/note-enterprise-guide-add-ins-are-out.html</link>
	<content:encoded>I wrote recently about &lt;a href=&quot;http://notecolon.blogspot.com/2010/01/note-enterprise-guide-add-ins.html&quot;&gt;the paucity of 3rd-party add-ins&lt;/a&gt; for Enterprise Guide. I finished the post by wondering aloud whether there were more that I hadn't found. Well, I've had no reports of any 3rd-party add-ins, but in Chris Hemedinger's SAS Dummy blog he summarised &lt;a href=&quot;http://blogs.sas.com/sasdummy/index.php?/archives/150-Custom-tasks-that-do-the-job.html&quot;&gt;a good range of SAS-supplied add-ins&lt;/a&gt; that are available for free download.&lt;br /&gt;
&lt;br /&gt;
Whilst they are largely unsupported, they certainly provide some jolly useful functionality. And the source code is provided so you can support them yourself.&lt;br /&gt;
&lt;br /&gt;
Thanks Chris!&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-2534747842362314412?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/a5lLl08nAh4&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-19T13:09:41+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-1690370505141138201">
	<title>NOTE: The blog of RTSL.eu: NOTE: Informats and Enterprise Guide 4.2 (beware)</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/FXUQ6xP-a_c/note-informats-and-enterprise-guide-42.html</link>
	<content:encoded>I'm a keen follower of Susan Slaughter's books (in conjunction with Lora Delwiche) and her &lt;a href=&quot;http://www.avocetsolutions.com/&quot;&gt;Avocet Solutions&lt;/a&gt; web site. The web site is very nicely&amp;nbsp;structured&amp;nbsp;and contains a&amp;nbsp;wealth&amp;nbsp;of solid information. Last week, the &lt;a href=&quot;http://susanslaughter.wordpress.com/category/little-sas-book-series/&quot;&gt;Little SAS Book Series&lt;/a&gt; featured an article about informats and Enterprise Guide 4.2. The &lt;a href=&quot;http://susanslaughter.wordpress.com/2010/02/09/eg-4-2-tip-farewell-to-informats/&quot;&gt;article &lt;/a&gt;highlighted useful, user-friendly features of EG 4.2's Data Grid, but also warned of the fact that said Data Grid ignores informats.&lt;br /&gt;
&lt;br /&gt;
The site and the article are recommended reading.&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-1690370505141138201?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/FXUQ6xP-a_c&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-19T13:09:16+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-4520388292864045677">
	<title>NOTE: The blog of RTSL.eu: Encourage the (New) Conference Speakers</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/UYI_xXNvyvM/encourage-new-conference-speakers.html</link>
	<content:encoded>Reflecting further on the unconference &amp;amp; BarCamp format of the &lt;a href=&quot;http://notecolon.blogspot.com/2010/02/analytics-camp.html&quot;&gt;Analytics Camp NC event that I mentioned last week&lt;/a&gt;, &amp;nbsp;whereby sessions are proposed and scheduled each day by the attendees and based upon pitches from the potential speakers, I realised that this is a good means of giving feedback to potential speakers and thereby encouraging new speakers.&lt;br /&gt;
&lt;br /&gt;
It's a little daunting to write a paper and send it off to some anonymous conference organiser in the hope that you might be seen to offer something of interest to fellow conference attendees. And I've recently seen at first-hand how conference organisers can be dismissive of those whose papers are not selected (to the extent of not even bothering to tell them that their paper was not selected). To get some constructive criticism out of them, in order to do a better job next time around, can be like getting blood out of a stone. People who have had papers accepted for conferences on previous occasions will not be put off by such behaviour; however, for a first-timer the anonymous rejection can easily put them off of ever submitting a paper again.&lt;br /&gt;
&lt;br /&gt;
By contrast, the atmosphere at Analytics Camp seems to have been very informal and welcoming. It sounds like just the sort of atmosphere where a novice might be tempted to propose a topic and be given positive encouragement to proceed with their idea.&lt;br /&gt;
&lt;br /&gt;
I continue to warm to the unconference &amp;amp; BarCamp ideas and ideals. More importantly, if you're organising a conference, please be sure your section chairs show respect and offer encouragement for all of those who take the time and effort to prepare a paper and submit it. For conferences to thrive they need a regular influx of new thoughts and ideas; don't stifle and discourage first-timers.&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-4520388292864045677?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/UYI_xXNvyvM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-19T09:49:39+00:00</dc:date>
</item>
<item rdf:about="http://www.sci-princess.info/?p=1025">
	<title>The Princess of Science: ‫Take Me Out To The Ball Game‬</title>
	<link>http://feedproxy.google.com/~r/sci-princess/~3/Lp0r3rnj0LY/1025</link>
	<content:encoded>&amp;#8235;השיר Take Me Out To The Ball Game מסכם את כל חווית הבייסבול. כשלקחתי את בני הבכור למשחק לראשונה בחייו (קאבס נגד הקרדינלס, הפסדנו 8:5 למרות ההום ראן ה-7 מתוך 66 שסמי סוסה הכה באותה עונה) הוא אמר לי בדרך:אני מקווה שלא יהיה shame, מתייחס בבירור לשורה מהשיר  &quot;&quot;If they don't win it's a [...]&amp;#8236;</content:encoded>
	<dc:date>2010-02-19T08:41:08+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/sasdummy/index.php?/archives/153-guid.html">
	<title>The SAS Dummy: A blog by any other name would smell just as...well, nevermind</title>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/LJKRCZGEKkk/index.php</link>
	<content:encoded>Within SAS, we have a &lt;a href=&quot;http://blogs.sas.com/socialmedia/index.php?/archives/65-Social-media-at-Fortunes-Best-Company-to-Work-for-in-America.html&quot; title=&quot;Dave Thomas on Social Media and SAS&quot;&gt;strong blogging community&lt;/a&gt; made up of SAS employees.  Those of us who read or contribute to the blog content on the &lt;em&gt;internal&lt;/em&gt; SAS web got a special &quot;shout out&quot; from &lt;em&gt;Fortune &lt;/em&gt;magazine, within its coverage of SAS as the&lt;a href=&quot;http://blogs.sas.com/sasdummy/index.php?/archives/148-Numero-Uno.html&quot; title=&quot;Numero Uno&quot;&gt; top workplace in the USA&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
The print version of the magazine includes a sidebar titled, &quot;An Army of Bloggers, 600 Strong&quot;, which discusses the SAS intranet with its cafe menus and work-life announcements, and especially the bloggers.  Here's an excerpt:&lt;br /&gt;
&lt;blockquote&gt;&lt;em&gt;More than 600 employees have their own internal blogs.  They're typically used to talk shop.  Chris Hemedinger writes the &quot;&lt;strong&gt;Smells Like a Log&lt;/strong&gt;&quot; blog, which covers, among other things, unusual uses for the SAS programming language.  One post discusses how SAS helped Kogi State University study &quot;&lt;a href=&quot;http://blogs.sas.com/sasdummy/index.php?/archives/123-Nutty-uses-for-SAS.html&quot; title=&quot;Nutty uses for SAS&quot;&gt;the effect of nut storage, nut size, and nut-soaking on nut-sprouting&lt;/a&gt;.&quot;&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;
I'm accustomed to people thinking that I have a &lt;a href=&quot;http://blogs.sas.com/sasdummy/index.php?/archives/43-Heimerdinger,-get-out-of-my-ego-surfing!.html&quot; title=&quot;but not as funny as Heimerdinger&quot;&gt;funny-sounding name&lt;/a&gt;, but I've never felt so conscious about the name of my internal-only SAS blog.  Now that the blog title has appeared in a national publication, I feel like I've got some explaining to do.&lt;br /&gt;
&lt;br /&gt;
I began keeping my internal SAS blog over 5 years ago.  Blogs were definitely not a new thing, but it was still in an era when some people called them &quot;&lt;a href=&quot;http://www.etymonline.com/index.php?search=blog&amp;amp;searchmode=term&quot; title=&quot;etymology of blog&quot;&gt;weblogs&lt;/a&gt;&quot;.  So it's a log, but on the web.  Where does the smell come in?&lt;br /&gt;
&lt;br /&gt;
I'm a software developer (okay, a manager who sometimes poses as a coder).  Several years ago I wrote a code routine to examine the contents of a text file and determine whether it contained log output from a SAS program.  What did I call the routine?  &lt;strong&gt;SmellsLikeALog()&lt;/strong&gt;.  (It returns True or False, depending on whether the text file contained the markers for SAS log output.)&lt;br /&gt;
&lt;br /&gt;
My colleagues thought that was a funny name, because (as any 4th grader will tell you) &quot;smells like a log&quot; has some hilarious connotations that have nothing to do with programming.&lt;br /&gt;
&lt;br /&gt;
When I founded my internal blog and had to assign a title, &quot;Smells like a log&quot; was the first (and only) thing that came to mind.  Blogs were a bit new at SAS, and I didn't think the title was going to have much significance.  Who knew?&lt;br /&gt;
&lt;br /&gt;
Now that I've told the story behind the title, I'm not convinced that the explanation will really boost my personal brand.  But it's the truth, and I know that if you don't tell the truth to the media, the bloggers will ferret you out, expose you, and you'll wind up smelling...well...less than rosy. 
    &lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/LJKRCZGEKkk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-18T13:57:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-1116546449646002174.post-6067048252343575787">
	<title>Jurassic SAS in the BI/EBI World: Sessions - A double edged sword</title>
	<link>http://hcsbi.blogspot.com/2010/02/sessions-double-edged-sword.html</link>
	<content:encoded>In my &lt;a href=&quot;http://hcsbi.blogspot.com/2010/02/work-doesnt-work-same-way.html&quot;&gt;previous post&lt;/a&gt; (which was longer ago than I'd like - but maybe I can blame the US East Coast Blizzard&lt;strong&gt;s&lt;/strong&gt;) I blogged about using Sessions as a surrogate for some of the things we &lt;em&gt;old-style&lt;/em&gt; SAS programmers used the &lt;strong&gt;WORK&lt;/strong&gt; library for.&lt;br /&gt;&lt;br /&gt;One of the things that many of us overlook when delivering SAS content over the web is that each request has to be quick - users get very impatient if they have to wait too long. So long-running programs with lots of steps should not just be packaged up as Stored Processes. They need to be broken down into pieces/parts that can be run sequentially - just like one can run a series of &lt;strong&gt;DATA/PROC&lt;/strong&gt; steps in an interactive SAS session. And that is where sessions can come into play - we can use a session to save data sets (and macro variables) from one request to the next). So the Sessions &lt;strong&gt;SAVE&lt;/strong&gt; library becomes the replacement/alternative for &lt;strong&gt;WORK&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;So here goes with a little tutorial on creating a Stored Process that uses sessions. Let me begin by saying that I will of course be packaging this as a macro so I can leverage my &lt;a href=&quot;http://hcsbi.blogspot.com/2010/01/useful-parametersextensions-for.html&quot;&gt;runMacro Stored Process&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The following macro code shows a simple template for how to use sessions. Note how the sysfunc macro is used to invoke the libref function which checks if the &lt;strong&gt;SAVE&lt;/strong&gt; library exists. Since the &lt;strong&gt;SAVE&lt;/strong&gt; library is created when the sesssion is created and is made available when reconnecting to a session, that is a convenient way to check if we already have a session.&lt;br /&gt;&lt;pre&gt;%macro sessionsExample;&lt;br /&gt; %global save_Session_Created;&lt;br /&gt; %if %sysfunc(libref(save)) ne 0 %then&lt;br /&gt; %do;  /* session does not exist - create it */&lt;br /&gt;&lt;br /&gt; %end;  /* session does not exist - create it */&lt;br /&gt; %else&lt;br /&gt; %do;  /* reconnecting to the session */&lt;br /&gt;&lt;br /&gt; %end; /* reconnecting to the session */&lt;br /&gt;%mend sessionsExample;&lt;/pre&gt;&lt;br /&gt;In the first %do-%end block we add some code to create a session: &lt;pre&gt; %let rc = %sysfunc(stpsrv_session(create));&lt;/pre&gt;and create a macro variable to be saved (note the prefix &lt;strong&gt;save_&lt;/strong&gt;)&lt;pre&gt; %let save_Session_Created = %sysfunc(datetime(),datetime.);&lt;/pre&gt;and, in this case some sample code to perhaps access a large table and summarize it - so we only have to do that once (and please forgive me for &lt;em&gt;cheating&lt;/em&gt; :-) here and using a small &lt;strong&gt;SASHELP&lt;/strong&gt; data set).&lt;pre&gt;proc summary data = sashelp.shoes nway;&lt;br /&gt; class product;&lt;br /&gt; var stores sales returns inventory;&lt;br /&gt; output out=save.SummaryTable(drop=_freq_ _type_) sum=;&lt;br /&gt;run;&lt;/pre&gt;We then list the data and use a title to generate a hyperlink to reconnect to the session.&lt;pre&gt;proc print data = save.SummaryTable;&lt;br /&gt; title &quot;Session Created at &amp;amp;save_Session_Created&quot;;&lt;br /&gt; title2 '&amp;lt;a href=&quot;' &quot;&amp;amp;_thisSession&quot; '&amp;amp;_program=' &quot;&amp;amp;_program&quot; '&amp;amp;macroToRun=' &quot;&amp;amp;macroTorun&quot; '&quot;&amp;gt;Reconnect&amp;lt;/a&amp;gt;';&lt;br /&gt;run;&lt;/pre&gt;The macro variable &lt;strong&gt;_thisSession&lt;/strong&gt; is the key here - this is what causes the request to connect back to the same session as described in this SAS &lt;a href=&quot;http://support.sas.com/rnd/itech/doc9/dev_guide/stprocess/sessions.html&quot;&gt;9.1.3 Doc&lt;/a&gt;. (and it works pretty much the same in 9.2)&lt;br /&gt;&lt;br /&gt;And in the code where we are reconnecting, we can access the macro variables and the data we saved in the &lt;strong&gt;SAVE&lt;/strong&gt; library, e.g., &lt;pre&gt;proc report data = save.SummaryTable;&lt;br /&gt; columns product stores sales returns inventory;&lt;br /&gt; rbreak after / summarize;&lt;br /&gt; title &quot;Reconnecting at %sysfunc(datetime(),datetime.) to Session Created at &amp;amp;save_Session_Created&quot;;&lt;br /&gt; footnote '&amp;lt;a href=&quot;' &quot;&amp;amp;_thisSession&quot; '&amp;amp;_program=' &quot;&amp;amp;_program&quot; '&amp;amp;macroToRun=' &quot;&amp;amp;macroTorun&quot; '&quot;&amp;gt;Reconnect Again&amp;lt;/a&amp;gt;&lt;br /&gt;run;&lt;/pre&gt;Feel free to &lt;a href=&quot;http://www.hcsbi.com:65432/SASStoredProcess/do?_program=/Projects/Tools/runMacro&amp;amp;macroToRun=sessionsExample&amp;amp;_odsstyle=html&quot;&gt;try it on on my server&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are lots of other example of sessions described in 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;. They work pretty much the same way in the SAS 9 Stored Process server with a few minor differences described on this page about &lt;a href=&quot;http://support.sas.com/rnd/itech/doc9/dev_guide/stprocess/inet2stp.html&quot;&gt;upgrading SAS/IntrNet program to Stored Processes&lt;/a&gt; (the most notable is the format change for the &lt;strong&gt;_REPLAY&lt;/strong&gt; macro variable).&lt;br /&gt;&lt;br /&gt;So by now, if you made it this far :-), you are probably confused by the reference to the &lt;em&gt;double edged sword&lt;/em&gt;. Check out the &lt;a href=&quot;http://support.sas.com/rnd/itech/doc9/dev_guide/stprocess/sessions.html&quot;&gt;limitations at the bottom of this page&lt;/a&gt; - overuse of sessions can seriously impact performance. So only use em when you need em!&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-6067048252343575787?l=hcsbi.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-02-18T08:45:44+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/SAS_Tip_Assigning_a_flag_with_value_1_or_0_to_variable">
	<title>StudySAS Blog: SAS Tip: Assigning a flag with value 1 or 0 to variable [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/pP6Gw_qnTro/SAS_Tip_Assigning_a_flag_with_value_1_or_0_to_variable</link>
	<content:encoded>*Creating a flag variable when a test variable meets certain criteria is very common for SAS programmers….&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/pP6Gw_qnTro&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-18T01:07:37+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-5054603230553339697">
	<title>SAS Programming: Clustering Handwirtten Digits (digitalized optical images)</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/ZlXFkqDXm7E/clustering-letters.html</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/ifdgrDElX1xQAK4EyGc5sI6QzQg/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/ifdgrDElX1xQAK4EyGc5sI6QzQg/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/ifdgrDElX1xQAK4EyGc5sI6QzQg/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/ifdgrDElX1xQAK4EyGc5sI6QzQg/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;In this example, we show the a clustering exercise on Optical Recognition of Handwritten Digits Data Set available&amp;nbsp;@ UCI data set repository (&lt;a href=&quot;http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits&quot;&gt;Link&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
This exercise is a standard application of HOSVD by stacking&amp;nbsp;8X8 matrix of digitalized&amp;nbsp;bitmap of each letter where 1-mode is digits for each&amp;nbsp;column and 2-mode corresponds to&amp;nbsp;rows while&amp;nbsp;3-mode is each letter&amp;nbsp;object, a standard Tensor representation.&amp;nbsp;U_(3) from HOSVD of this Tensor gives indication information for clustering. In this exercise, we&amp;nbsp;apply k-means algorithm on the correlation matrix of each row of U_(3), which corresponds to each subject,&amp;nbsp;with each column of right eigenvector matrix to eliminate outlier effect and stablize the matrix for final clustering algorithm. &lt;br /&gt;
&lt;br /&gt;
The clustering result, together with original unclustered&amp;nbsp;correlation data and correlation data sorted by true letter ID, is shown below. In order to facilitate display, we show the confusion matrix of the correlation matrix so that the clustering result is more obvious to identify. &lt;br /&gt;
&lt;br /&gt;
Cross Tabulation of True Class (0-9) and Clustering Result (1-10):&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SyQrviRAZRI/AAAAAAAAAKY/YKMl556dHMY/s1600-h/SVD-Clustering-xTab.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SyQrviRAZRI/AAAAAAAAAKY/YKMl556dHMY/s640/SVD-Clustering-xTab.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Further thoughts. The confusion matrix display shows that while the letter clusters have shown up but the pattern is not as&amp;nbsp;prominent as we expected. However, it is possible to obtain better result by applying&amp;nbsp; Nonnegative Matrix Factorization (NMF)&amp;nbsp;to the square of correlation confusion matrix. The NMF algorithm will be implemented in SAS soon.&lt;br /&gt;
&lt;br /&gt;
Note: All numerical analyses are done using the prototype code demonstrated at this Blog Entry (&lt;a href=&quot;http://sas-programming.blogspot.com/2009/12/tensor-in-sas.html&quot;&gt;Link&lt;/a&gt;). This&amp;nbsp;figure is drawn in R.&lt;br /&gt;
&lt;div align=&quot;left&quot; class=&quot;separator&quot;&gt;&lt;br /&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;a href=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SyQdzUu6WpI/AAAAAAAAAKQ/NXeKLJtYsHA/s1600-h/SVD+based+clustering.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/_slrAR0IXTL0/SyQdzUu6WpI/AAAAAAAAAKQ/NXeKLJtYsHA/s640/SVD+based+clustering.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;【 Clustering Result shown in Confusion Matrix style 】&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Reference:&lt;br /&gt;
&lt;b&gt;Matrix Methods in Data Mining and Pattern Recognition&lt;/b&gt; &lt;i&gt;by Lars Eldén&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.amazon.com/Methods-Pattern-Recognition-Fundamentals-Algorithms/dp/0898716268?ie=UTF8&amp;amp;tag=xie1978&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969&quot;&gt;&lt;img alt=&quot;Matrix Methods in Data Mining and Pattern Recognition (Fundamentals of Algorithms)&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=0898716268&amp;amp;tag=xie1978&quot; /&gt;&lt;/a&gt;&lt;img 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=0898716268&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&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-5054603230553339697?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/ZlXFkqDXm7E&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-17T18:43:35+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-1726216218530168963">
	<title>SAS Programming: Implementing Gap statistic for clustering number estimation</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/nYFAAnNnWR4/implementing-gap-statistic-for.html</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/D9xpae6K01_vq9vwfsjrWF31whE/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/D9xpae6K01_vq9vwfsjrWF31whE/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/D9xpae6K01_vq9vwfsjrWF31whE/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/D9xpae6K01_vq9vwfsjrWF31whE/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;Gap statistic is a method used to estimate the most possible number of clusters in a partition clustering, noticeablly k-means clustering. This measurement was originated by Trevor Hastie, Robert Tibshirani, and Guenther Walther, all from Standford University.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The final estimate of cluster number is&lt;br /&gt;
min_K Gap(K)&amp;gt;=Gap(K+1)-s(K+1)&lt;br /&gt;
&lt;br /&gt;
Code below implements uniform sampling approach (method (a) in their paper, samplemethod=1)and SVD sampling approach (method (b), samplemethod=2).&lt;br /&gt;
&lt;br /&gt;
The simulated data has 5 clusters as seen below, while the Gap Statistic correctly identifies this number of clusters as:&lt;br /&gt;
\hat_k = 4, Gap=1.37285, Gap_(K+1)-s_(K+1)=1.6494&lt;br /&gt;
\hat_k = 5, Gap=1.65057, Gap_(K+1)-s_(K+1)=1.6485, Gap_K&amp;gt;[Gap-s]_(K+1)&lt;br /&gt;
\hat_k = 6, Gap=1.64965, Gap_(K+1)-s_(K+1)=1.6483&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S1tf5gUxVkI/AAAAAAAAALc/-OduSEkVIlM/s1600-h/Cluster.gif&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;272&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/S1tf5gUxVkI/AAAAAAAAALc/-OduSEkVIlM/s400/Cluster.gif&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
/* Gap Statistics of Hastie et al. */

data test;
     length ID 5;
     array _X{50} X1-X50;
  do ID=1 to 4000;
     beta=mod(ID, 5)+1;
  do _j=1 to 50;
     _X[_j]=rannor(6898776)+beta*3;
  end;
  output;
  keep ID X:;
  end;
run;


%macro GAPstat(dsn, ID_var, dsn_GAP, max_K, max_rep, samplemethod=1, seed=147852369);
%local dsn  B K dsid nobs ID dsn_out  features features2 num_features;

%let B=&amp;amp;max_rep;
%let dsid=%sysfunc(open(&amp;amp;dsn));
%let nobs=%sysfunc(attrn(&amp;amp;dsid, nobs));
%let dsid=%sysfunc(close(&amp;amp;dsid));
%put &amp;amp;nobs;

%let ID=&amp;amp;ID_var;
%let dsn_out=_clus_out;
%let ref_dist=_ref_dist;


proc contents data=&amp;amp;dsn out=allvars(keep=name varnum) noprint; run;
proc sort data=allvars; by varnum; run;
proc sql  noprint;
     select name into :features separated by ' '
  from   allvars
  where  name^=&quot;&amp;amp;ID&quot;
  ;
     select count(distinct name) into :num_features 
  from   allvars
  where  name^=&quot;&amp;amp;ID&quot;
  ;
quit;


%if &amp;amp;samplemethod eq 1 %then %do;
proc means data=&amp;amp;dsn noprint;
     var &amp;amp;features;
  output out=_lim(where=(_STAT_ in ('MIN', 'MAX')));
run;
%end;
%else %if &amp;amp;samplemethod eq 2 %then %do;
proc princomp data=&amp;amp;dsn   noint cov noprint
                     outstat=_V(where=(_TYPE_='USCORE'));
    var &amp;amp;features;
run;
data _V_score/view=_V_score;
       set _V;
    _TYPE_='PARMS';
    
run;
proc score data=&amp;amp;dsn  score=_V_score type=parms  out=_Z;
       var &amp;amp;features;
run;
proc means data=_Z  noprint;
       var &amp;amp;features;
    output   out=_lim(where=(_STAT_ in ('MAX', 'MIN')));
run;
%end;
%else %do;
         %put Only value=1 (uniformly sampling) and 2 (SVD sampling) allowed.;
         %goto exit;
%end;

data &amp;amp;ref_dist;
     array _stat{2, &amp;amp;num_features} _temporary_;
  array _F{&amp;amp;num_features}  &amp;amp;features;
  
     do until (eof);
     set _lim end=eof;
     if _STAT_='MIN' then _row=1;
     else _row=2;
     do _k=1 to &amp;amp;num_features; 
              if _row=1 then _stat[_row, _k]=_F[_k];
     else _stat[_row, _k]=_F[_k]-_stat[_row-1, _k];
     end;
 end;
  
     
  do _B=1 to &amp;amp;B;
     do &amp;amp;ID=1 to &amp;amp;nobs;
     do _k=1 to &amp;amp;num_features;
        _F[_k]=ranuni(&amp;amp;seed)*(_stat[2, _k]) + _stat[1, _k];
     end;    
     keep _B &amp;amp;ID &amp;amp;features;
     output;
  end;
 end;
run;

%if &amp;amp;samplemethod eq 2 %then %do;
proc transpose data=_V  out=_Vt;  run;
proc sql noprint;
       select  name into :features2 separated by ' &quot;, &quot;'
    from   allvars
    where  upcase(name)^=(&quot;&amp;amp;ID&quot;)
    ;
quit;
data _Vt_score/view=_Vt_Score;     
    set _Vt; 
    set allvars(where=(name in (&quot;&amp;amp;features2&quot;)));
       retain  _TYPE_ &quot;PARMS&quot;; 
    _LABEL_=_NAME_;
    _NAME_=name;
    drop name;
run;
proc score data=&amp;amp;ref_dist   score=_Vt_score   type=parms
                out=&amp;amp;ref_dist.(keep=_B  &amp;amp;ID &amp;amp;features);
    var &amp;amp;features;
run;
%end;

%do K=1 %to &amp;amp;max_K;
    proc fastclus data=&amp;amp;dsn  maxclusters=&amp;amp;K  
              out=&amp;amp;dsn_out.(keep=&amp;amp;ID Distance CLUSTER) 
              noprint;
         var &amp;amp;features;
    run;

    proc fastclus data=&amp;amp;ref_dist maxclusters=&amp;amp;K  
              out=&amp;amp;dsn_out._&amp;amp;K.(keep=&amp;amp;ID _B Distance CLUSTER)  
              noprint;
         by _B;
         var &amp;amp;features;
    run;

 proc sort data=&amp;amp;dsn_out; by CLUSTER; run;
 proc sort data=&amp;amp;dsn_out._&amp;amp;K; by _B CLUSTER; run;

    proc means data=&amp;amp;dsn_out  sum noprint;          
      class CLUSTER;
         var Distance;
         output out=_dist_  sum(Distance)=Distortion;
    run;
    proc means data=&amp;amp;dsn_out._&amp;amp;K  sum noprint;
         by _B  CLUSTER;
         var Distance;
         output out=_dist_&amp;amp;K  sum(Distance)=Distortion;
    run;
    data _dist_; 
      set _dist_;
   _FREQ_=_FREQ_/&amp;amp;nobs;
 run;
 data _dist_&amp;amp;K;
      set _dist_&amp;amp;K;
   _FREQ_=_FREQ_/&amp;amp;nobs;
 run;
 proc means data=_dist_ noprint  sum;
      var Distortion;
   weight _FREQ_;
   output out=_dist_  sum(distortion)=distortion;
 run;
 proc means data=_dist_&amp;amp;K noprint  sum;
      by _B;
   var Distortion;
   weight _FREQ_;
   output out=_dist_&amp;amp;K  sum(distortion)=distortion;
 run;

    data _dist_&amp;amp;K(drop=mean _B:) _logmean_&amp;amp;K.(keep=mean);
         array _D{&amp;amp;B} _B1-_B&amp;amp;B;
         set _dist_&amp;amp;K end=eof;
         logD=log(Distortion)+log(&amp;amp;nobs);
         _D[_n_]=logD;
         output _dist_&amp;amp;k;
         if eof then do;     
            mean=mean(of _D[*]);
            output  _logmean_&amp;amp;K;  
         end;
    run;

    proc means data=_dist_&amp;amp;K  noprint;
         var logD;
         output out=_s_&amp;amp;K.(where=(_STAT_='STD'));
    run;

    data Gap_&amp;amp;K;
        set _dist_; set _logmean_&amp;amp;K ; set _s_&amp;amp;K(keep=logD);
  Wk=log(distortion)+log(&amp;amp;nobs);
        GAP=mean-Wk;
        s=logD*sqrt(1+1/&amp;amp;B);
        keep mean  Wk  GAP s;
    run;
%end;

data &amp;amp;dsn_GAP;
     set %do K=1 %to &amp;amp;max_K;
         Gap_&amp;amp;K
   %end;;
run;
%exit:
%mend;

%let dsn=test;
%let ID=ID;
%let dsn_GAP=GAP;
%let max_K=10;
%let max_rep=100;
%GAPStat(&amp;amp;dsn, &amp;amp;ID, &amp;amp;dsn_GAP, &amp;amp;max_K, &amp;amp;max_rep, samplemethod=2);

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
A reference paper can be found at:&lt;br /&gt;
R. Tibshirani, G. Walther, and T. Hastie. 2001. &lt;br /&gt;
&lt;b&gt;Estimating the number of clusters in a dataset via the Gap statistic&lt;/b&gt;. &lt;br /&gt;
&lt;i&gt;Journal of the Royal Statistics Society (Series B), &lt;/i&gt;pp. 411--423. &lt;br /&gt;
&lt;br /&gt;
Or the book by R. Tibshirani, G. Walther, and T. Hastie:&lt;br /&gt;
&lt;b&gt;The Elements of Statistical Learning&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.amazon.com/Elements-Statistical-Learning-Prediction-Statistics/dp/0387848576?ie=UTF8&amp;amp;tag=xie1978&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969&quot;&gt;&lt;img alt=&quot;The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition (Springer Series in Statistics)&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=0387848576&amp;amp;tag=xie1978&quot; /&gt;&lt;/a&gt;&lt;img 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=0387848576&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&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-1726216218530168963?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/nYFAAnNnWR4&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-17T18:43:11+00:00</dc:date>
</item>
<item rdf:about="http://blogs.sas.com/jmp/index.php?/archives/283-guid.html">
	<title>JMP Blog: Tools to Help Teach JMP</title>
	<link>http://blogs.sas.com/jmp/index.php?/archives/283-Tools-to-Help-Teach-JMP.html</link>
	<content:encoded>In a recent live Webcast for faculty and students, I showed teaching modules developed by Amy Froelich (Iowa State University) and Bill Duckworth (Creighton University) that were programmed by Wayne Levin and Brian McFarlane (Predictum Inc.). &lt;br /&gt;
 &lt;br /&gt;
Here I show how to invoke these modules (which are encrypted JMP scripts) or other teaching scripts from a JMP menu you can create. Here is how your new menu might look:&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/New_Menu.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Before you start:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;If you don’t know how to add menus, please see &lt;a href=&quot;http://blogs.sas.com/jmp/index.php?/archives/282-Make-a-Menu.-Share-a-Script..html&quot;&gt; these instructions&lt;/a&gt;. &lt;li&gt;The code for the modules or other teaching scripts need to reside on the computer from which you are running JMP.&lt;br /&gt;
&lt;li&gt;To download the &lt;a href=&quot;http://www.jmp.com/academic/learning_modules.shtml&quot;&gt;concept modules&lt;/a&gt;, you need a SAS profile. Log in only once per session to download all the modules, demos and  files you want.&lt;br /&gt;
&lt;li&gt;After you create and save the menu, you must close and reopen JMP for the scripts to work.&lt;br /&gt;
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;dl&gt;&lt;br /&gt;
&lt;dt&gt;1. Download the scripts from &lt;a href=&quot;http://www.jmp.com/academic/learning_modules.shtml&quot; target=&quot;_blank&quot;&gt;http://www.jmp.com/academic/learning_modules.shtml&lt;/a&gt; to your hard drive.&lt;/dt&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;dt&gt;2. Create a main Teaching menu and a sub-menu for each concept module. (After creation, the main menu will display on your menu bar, and when you expand the new main menu, you will see a new sub-menu that will execute your script.)&lt;/dt&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;dt&gt;3. Name each sub-menu and associate it with the correct .jsl file&lt;/dt&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;dd&gt;a. Right-click the sub-menu &lt;strong&gt;Untitled Menu &lt;/strong&gt;and select &lt;strong&gt;Properties&lt;/strong&gt;. A &lt;strong&gt;Menu Item Properties &lt;/strong&gt;window appears. &lt;/dd&gt;&lt;br /&gt;
&lt;dd&gt;b. Under &lt;strong&gt;Menu Item Type&lt;/strong&gt;, select the &lt;strong&gt;Command&lt;/strong&gt; radio button. &lt;/dd&gt;&lt;br /&gt;
&lt;dd&gt;c. In the &lt;strong&gt;Caption &lt;/strong&gt;box, type the name of your sub-menu. &lt;/dd&gt;&lt;br /&gt;
&lt;dd&gt;d. Select the &lt;strong&gt;Run JSL in this file&lt;/strong&gt; radio button. &lt;/dd&gt;&lt;br /&gt;
&lt;dd&gt;e. Use the Browse button to locate and select the script file that you want this sub-menu to launch. &lt;/dd&gt;&lt;br /&gt;
&lt;dd&gt;f. Click &lt;strong&gt;OK&lt;/strong&gt;.&lt;/dd&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/Distribution_Generator.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;dt&gt;4. Add sample teaching scripts from the JMP Sample Script directory. For example, Mia finds the scripts for least squares and for comparing the normal and &lt;em&gt;t &lt;/em&gt;distributions useful teaching tools.&lt;/dt&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;dd&gt;a. Save the scripts to your hard drive. Typically, the scripts are stored in&lt;strong&gt; Program Files&gt;SAS&gt;JMP&gt;8&gt;Support Files&gt; Sample Scripts&lt;/strong&gt;.  &lt;/dd&gt;&lt;br /&gt;
&lt;dd&gt; b. Follow Step 3 to create sub-menus and select the script file to associate with each sub-menu.&lt;/dd&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width=&quot;400&quot; src=&quot;http://blogs.sas.com/jmp/uploads/Least_Squares.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Remember to apply these new menu changes before you close JMP.  Then, reopen JMP to test your work.&lt;/dl&gt;</content:encoded>
	<dc:date>2010-02-17T14:30:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-3401137187963845372.post-9173556979168820862">
	<title>NOTE: The blog of RTSL.eu: NOTE: The Missing Semicolon Just Arrived</title>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/rQCfGNEyZtc/note-missing-semicolon-just-arrived.html</link>
	<content:encoded>Systems Seminar Consultants' newsletter (named &lt;i&gt;The Missing Semicolon&lt;/i&gt;) is always a good read, so I was pleased to get notification of the Winter 2010 issue last week. Featuring a mixture of topics, this issue seems to focus on writing good documentation (program documentation and system documentation). Please don't view this as a switch-off topic! Read the articles and you'll better understand the benefits that properly targeted and focused documentation offers. &lt;br /&gt;
&lt;br /&gt;
However, I do strongly disagree with the author's rule of adding a comment to &lt;em&gt;every&lt;/em&gt; line of code. Programming standards always give rise to a strong degree of discussion, but in my opinion slavishly putting comments onto every line of code doesn't add anything to the reader's knowledge of the code. Indeed, in the example code given, the vast majority of on-the-line comments are stating the obvious. Comments should describe what is &lt;em&gt;not&lt;/em&gt; obvious in the code - that typically means describing what blocks of code are doing and/or why a particular approach was taken (and why other approaches were considered but discarded).&lt;br /&gt;
&lt;br /&gt;
The issue also offers a review of &lt;i&gt;The Little SAS Book&lt;/i&gt;&amp;nbsp;(by&amp;nbsp;Lora Delwich and&amp;nbsp;Susan Slaughter whom I &lt;a href=&quot;http://notecolon.blogspot.com/2010/02/note-informats-and-enterprise-guide-42.html&quot;&gt;featured yesterday&lt;/a&gt;), and a nice tip regarding the INFILE statement's MISSOVER parameter.&lt;br /&gt;
&lt;br /&gt;
I recommend you hop over to Systems Seminar Consultants' &lt;a href=&quot;http://sys-seminar.com/publications_tms.php&quot;&gt;publications page&lt;/a&gt; and a) sign-up for a free subscription, and b) take some time to browse through the archive of issues.&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-9173556979168820862?l=notecolon.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/rQCfGNEyZtc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-17T14:24:04+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-29815492.post-7110724578219671312">
	<title>SAS Programming: Tensor in SAS</title>
	<link>http://feedproxy.google.com/~r/SasProgramming/~3/5LX8TNrWogo/tensor-in-sas.html</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/w7gomtuhn_WTHp9rAFtmQlqcadE/0/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/w7gomtuhn_WTHp9rAFtmQlqcadE/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/w7gomtuhn_WTHp9rAFtmQlqcadE/1/da&quot;&gt;&lt;img src=&quot;http://feedads.g.doubleclick.net/~a/w7gomtuhn_WTHp9rAFtmQlqcadE/1/di&quot; border=&quot;0&quot; ismap=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/p&gt;Tensor, a math concept for high order array, is a very useful tool in modern data mining applications. HOSVD, the counter part of SVD in higher order array, is at the heart of modern applications, such as face recognition and clustering, segmentation of multi-dimensional transaction data, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SyVUpmr7qFI/AAAAAAAAAK4/_6_9Qm3vduU/s1600-h/HOSVD-visual.png&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_slrAR0IXTL0/SyVUpmr7qFI/AAAAAAAAAK4/_6_9Qm3vduU/s640/HOSVD-visual.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;【&quot;&lt;em&gt;Matrix Method in Data Mining and Pattern Recognition&lt;/em&gt;&quot; by Lars Eldén】&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
But implementation of math operations designed for Tensor is not easy, not to mention doing that in SAS. Due to the design nature of SAS data set, everything has to be done in a 1-D or 2-D matrix fashion. Luckily, Tensor operations have their low dimension matrix counterpart, only that matrix subscriptions need to be calculated carefully.&lt;br /&gt;
&lt;br /&gt;
I spent recent couple of days to implement some featured Tensor operations, notably Tensor unfolding (Tensor to Matrix) and HOSVD for my research and work. A prototype code for 3-mode Tensor unfolding and HOSVD SAS code is shown below. Data is from Lathauwer et al., &quot;A MULTILINEAR SINGULAR VALUE DECOMPOSITION&quot;, SIAM J. MATRIX ANAL. APPL. vol.21, No.4&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;

data A1;
     input X1-X3;
datalines;
 0.9073  0.8924  2.1488
 0.7158 -0.4898  0.3054
-0.3698  2.4288  2.3753
 1.7842  1.7753  4.2495
 1.6970 -1.5077  0.3207
 0.0151  4.0337  4.7146
 2.1236 -0.6631  1.8260
-0.0740  1.9103  2.1335
 1.4420 -1.7495 -0.2716
;
run;

filename Acat  catalog 'work.tensor.A2.CATAMS';

data _null_;
     file Acat;
     mode='1;';
     dimension='3,3,3;';
     put mode dimension;
run;

%let _dims=2 3 4;
%let _totalmode=3;
%let _mode0=1;
%let _modex=2;
%let _dimension2=6;
%let _dimension1=4;

data _null_;
      infile A2Cat;
      input;  
      _index=trim(scan(_infile_, 1, ';')); put _index=;
      _dimension=trim(scan(_infile_, 2, ';')); put _dimension=;       
      d2=count((_dimension), ',');  put d2=;
      call symput('_totalmode', d2+1);   
      call symput('_dims', translate(_dimension, ' ', ','));
      _dim0=scan(_dimension, &amp;amp;_mode0, ',');
      _dimx=scan(_dimension, &amp;amp;_modex, ',');
      call symput('_dim0', _dim0);
      call symput('_dimx', _dimx);
      call symput('_dim0x', compress(max(_dim0, _dimx)));
      dim2=1; dim1=1;
      do j=1 to d2+1;      
         if j=&amp;amp;_modex then dim1=dim1*scan(_dimension, j, ',');
         else dim2=dim2*scan(_dimension, j, ',');         
      end;
      put dim1= dim2= dim20=;
      call symput('_dimension1', compress(dim1));
      call symput('_dimension2', compress(dim2));   
run;
%put &amp;amp;_totalmode  &amp;amp;_dim0x;
%put &amp;amp;_dimension1  &amp;amp;_dimension2;
%put &amp;amp;_dims;

data  A&amp;amp;_modex;
      array _dim{&amp;amp;_totalmode} _temporary_ (&amp;amp;_dims);
      array _v{&amp;amp;_totalmode} _temporary_;
      array _datavec{&amp;amp;_dim0x} X1-X&amp;amp;_dim0x;
      array _X{&amp;amp;_dimension2, &amp;amp;_dimension1} _temporary_;
      set A&amp;amp;_mode0  end=eof;
      m1=mod(&amp;amp;_mode0+1, &amp;amp;_totalmode); if m1=0 then m1=&amp;amp;_totalmode;
      m2=mod(&amp;amp;_mode0+2, &amp;amp;_totalmode); if m2=0 then m2=&amp;amp;_totalmode;
      _v[m2]=mod(_n_, _dim[m2]); if _v[m2]=0 then _v[m2]=_dim[m2];
      _v[m1]=floor((_n_-_v[m2])/_dim[m2])+1;
      do j=1 to &amp;amp;_dim0;
         _v[&amp;amp;_mode0]=j;
         m1=mod(&amp;amp;_modex+1, &amp;amp;_totalmode); if m1=0 then m1=&amp;amp;_totalmode;
         m2=mod(&amp;amp;_modex+2, &amp;amp;_totalmode); if m2=0 then m2=&amp;amp;_totalmode;  
         _m=_v[&amp;amp;_modex];
         _n=(_v[m1]-1)*_dim[m2]+_v[m2];
         _X[_n, _m]=_datavec[j];
      end;
      if eof then do;
         do j=1 to &amp;amp;_dimension2;
            do k=1 to &amp;amp;_dimension1;
               _datavec[k]=_X[j, k];
            end;
            keep X1-X&amp;amp;_dim0x;
            output;
         end;
   end; 
run;

filename Acat  catalog &quot;work.tensor.A&amp;amp;_modex..CATAMS&quot;;
data _null_;
     file Acat;
     mode=&quot;&amp;amp;_modex;&quot;;
     dimension=&quot;3,3,3;&quot;;
     put mode dimension;
run;

ods select none;
proc princomp data=A1  outstat=stat_1 noint  cov;
     var X1-X3;
run;
proc princomp data=A2  outstat=stat_2 noint  cov;
     var X1-X3;
run;
proc princomp data=A3  outstat=stat_3 noint  cov;
     var X1-X3;
run;
ods select all;

/***************************************
In order to obtain Tensor core S, we can 
do something like this:
S_(1)=t(U1)%*%A_(1)%*%(kronecker(U2, U3)
where S_(1) is 1-mode matrix of S and A_(1) 
is 1-mode matrix of A
****************************************/

%macro kroneck(mat_A, mat_B, mat_kronecker);
%local dsid row_B col_B  col_A;

%let dsid=%sysfunc(open(&amp;amp;mat_B));
%let row_B=%sysfunc(attrn(&amp;amp;dsid, nobs));
%let col_B=%sysfunc(attrn(&amp;amp;dsid, nvars));
%let dsid=%sysfunc(close(&amp;amp;dsid));
%let dsid=%sysfunc(open(&amp;amp;mat_A));
%let col_A=%sysfunc(attrn(&amp;amp;dsid, nvars));
%let dsid=%sysfunc(close(&amp;amp;dsid));

data _null_;
     col_K=&amp;amp;col_A*&amp;amp;col_B;
     call symput('col_K', compress(col_K));
run;
%put &amp;amp;col_A  &amp;amp;col_B  &amp;amp;col_K &amp;amp;row_B;

proc sql noprint;
     select name into :vars_A separated by ' '
  from   sashelp.vcolumn
  where  libname='WORK' and memname=%upcase(&quot;&amp;amp;mat_A&quot;)
  ;
     select name into :vars_B separated by ' '
  from   sashelp.vcolumn
  where  libname='WORK' and memname=%upcase(&quot;&amp;amp;mat_B&quot;)
  ;
quit;

data &amp;amp;mat_kronecker;
     array _K{&amp;amp;col_K} K1-K&amp;amp;col_K;
  array _A{&amp;amp;col_A} &amp;amp;vars_A;
  array _B{&amp;amp;col_B} &amp;amp;vars_B;
  array _Atmp{&amp;amp;col_A} _temporary_;
     array _Btmp{&amp;amp;col_B} _temporary_;

  do n1=1 to na;  
     set &amp;amp;mat_A  nobs=na point=n1;
  do j=1 to dim(_A);
           _Atmp[j]=_A[j];
  end;
     do n=1 to nb;
           set &amp;amp;mat_B nobs=nb point=n;
     do j=1 to dim(_B);
              _Btmp[j]=_B[j];
     end;
     do j=1 to &amp;amp;col_K;
        _ib=mod(j, &amp;amp;col_B); if _ib=0 then _ib=&amp;amp;col_B;
        _ia=floor((j-_ib)/&amp;amp;col_B)+1;
     *put _ia= _ib=  j= _A[_ia]= _B[_ib]=;
              _K[j]=_Atmp[_ia]*_Btmp[_ib];
     end;
     keep K1-K&amp;amp;col_K;
     output;
     end;
  end;
  stop;
run;

%mend kronecker;

options mprint  mlogic;
%kroneck(B, A, C);

data U1t(keep=X:);
     set stat_1;
     where _type_='USCORE';
run;
data U2t(keep=X:);
     set stat_2;
     where _type_='USCORE';
run;
data U3t(keep=X:);
     set stat_3;
     where _type_='USCORE';
run;

options nomprint  nomlogic;
%kroneck(U2t, U3t, U23t);

data A1score;
     set A1;
     retain _TYPE_ 'PARMS'; 
     _NAME_=compress('K'||_n_);
run;

proc score data=u1t  score=A1score out=u1A1(keep=K:) type=parms;
     var X1-X3;
run;
data u1A1;
     set u1A1;
     retain _TYPE_ 'PARMS'; 
     _NAME_=compress('X'||_n_);
run;

proc score data=u23t  score=u1A1  out=S1(keep=X:) type=parms;
     var K1-K9;
run;

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Reference:&lt;br /&gt;
&lt;i&gt;Matrix Methods in Data Mining and Pattern Recognition&lt;/i&gt; by Lars Eldén&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.amazon.com/Methods-Pattern-Recognition-Fundamentals-Algorithms/dp/0898716268?ie=UTF8&amp;amp;tag=xie1978&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969&quot;&gt;&lt;img alt=&quot;Matrix Methods in Data Mining and Pattern Recognition (Fundamentals of Algorithms)&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=0898716268&amp;amp;tag=xie1978&quot; /&gt;&lt;/a&gt;&lt;img 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=0898716268&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&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-7110724578219671312?l=sas-programming.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasProgramming/~4/5LX8TNrWogo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-16T23:47:11+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/How_to_check_if_File_is_exist_or_not_in_SAS_StudySAS_Blog">
	<title>StudySAS Blog: How to check if File is exist or not in SAS | StudySAS Blog [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/UHMyZj5vEXU/How_to_check_if_File_is_exist_or_not_in_SAS_StudySAS_Blog</link>
	<content:encoded>Guys… Let me try explaining how to check if the file exist in the library or directory using SAS. Here I am writing a macro to check if the file exist in the directory or not. Here is the way to check it…&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/UHMyZj5vEXU&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-16T19:33:26+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/Renaming_Variables_Using_the_SASHELP_Views_StudySAS_Blog">
	<title>StudySAS Blog: Renaming Variables Using the SASHELP Views| StudySAS Blog [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/qxN_C0LV6-o/Renaming_Variables_Using_the_SASHELP_Views_StudySAS_Blog</link>
	<content:encoded>1) The 1st step of the program determines the total number of variables inside the dataset with the help of SASHELP.Vtable, Data _null_ step used to do the same …. A macro variable NVAR (Number of Variables) will be created after this step which can be accessed in the following steps.&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/qxN_C0LV6-o&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-16T18:22:04+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/Length_of_Numeric_variables_GT_8_in_SAS_StudySAS_BLOG">
	<title>StudySAS Blog: Length of Numeric variables GT 8 in SAS| StudySAS BLOG [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/y1C3dRDGwWw/Length_of_Numeric_variables_GT_8_in_SAS_StudySAS_BLOG</link>
	<content:encoded>Q&amp;amp;A: numeric variables length more than 8? We all know that the default length of the numeric variables in SAS is 8 and if suppose I want to store a number lets say (12345678910, which has a length 11 to numeric variable) to variable total, what should I do?&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/y1C3dRDGwWw&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-16T16:51:27+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/A_Sampler_of_What_s_New_in_Base_SAS_9_2_StudySAS_Blog">
	<title>StudySAS Blog: A Sampler of What's New in Base SAS 9.2 | StudySAS Blog [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/dgnARK7qSgk/A_Sampler_of_What_s_New_in_Base_SAS_9_2_StudySAS_Blog</link>
	<content:encoded>SAS 9.2, What's New in SAS 9.2&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/dgnARK7qSgk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-16T15:40:41+00:00</dc:date>
</item>
<item rdf:about="http://digg.com/programming/Using_ODS_to_Create_Customised_Output_StudySAS_Blog">
	<title>StudySAS Blog: Using ODS to Create Customised Output | StudySAS Blog [Digg]</title>
	<link>http://feedproxy.google.com/~r/sastips/~3/sXYzB157Nh0/Using_ODS_to_Create_Customised_Output_StudySAS_Blog</link>
	<content:encoded>Using the SAS Output Delivery System (ODS), you can create, customise, and manage HTML output in any operating environment by submitting programming statements. After creating HTML files, you can view them using Internet Explorer, Netscape Navigator.....&lt;img src=&quot;http://feeds.feedburner.com/~r/sastips/~4/sXYzB157Nh0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-02-16T15:29:36+00:00</dc:date>
</item>

</rdf:RDF>
