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

<item>
	<title>SAS Users Groups: So long from SAS Global Forum 2012</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3086</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/16Ctu4D70vQ/</link>
	<description>&lt;p&gt;Here is the last video from the last day at SAS Global Forum 2012. This one is great! Make sure you stay in there long enough to watch the outtakes: they are so funny!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;!-- powered by Iframe plugin ver.2.1 (wordpress.org/extend/plugins/iframe/) --&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/inside-sas-global-forum/&quot;&gt;Inside SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=16Ctu4D70vQ:MfyYlgWXFDU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=16Ctu4D70vQ:MfyYlgWXFDU:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=16Ctu4D70vQ:MfyYlgWXFDU:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=16Ctu4D70vQ:MfyYlgWXFDU:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/16Ctu4D70vQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 17 May 2012 13:00:44 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Three SAS books win international awards</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2770</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/hUmBopo73uE/</link>
	<description>This past January, I wrote, “As we wrapped up 2011 and began preparing for 2012,&quot; we were notified by the Society for Technical Communication, Carolina Chapter, that three SAS Press books received awards in the 2011-2012 competition. . . . Entries receiving a Distinguished or Excellence award from the local [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=hUmBopo73uE:_GWASffBwn4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=hUmBopo73uE:_GWASffBwn4:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/hUmBopo73uE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 16 May 2012 14:22:47 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: SAS User Feedback Award Winner: Pete Lund</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3069</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/Ps7p13skaho/</link>
	<description>&lt;p&gt;Annette Harris spends several minutes during this video extolling many of the high-performance virtues of Pete Lund, Information Systems Manager, Looking Glass Analytics. One thing she didn't mention (it was mentioned to me later) is that Pete is a long-time member of SAS-L. Do you know how many other SAS User Feedback Award Winners have also been SAS-Lers?&lt;span id=&quot;more-3069&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;!-- powered by Iframe plugin ver.2.1 (wordpress.org/extend/plugins/iframe/) --&gt;
 &lt;/p&gt;
&lt;div&gt;Watch &lt;a title=&quot;live streaming video&quot; href=&quot;http://www.livestream.com/?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;live streaming video&lt;/a&gt; from &lt;a title=&quot;Watch sasglobalforum2012 at livestream.com&quot; href=&quot;http://www.livestream.com/sasglobalforum2012?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;sasglobalforum2012&lt;/a&gt; at livestream.com&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is a &lt;a title=&quot;Pete Lund SUGI, SAS Global Forum and SUG papers&quot; href=&quot;http://lexjansen.com/search/searchresults.php?cx=011240857950991443104%3Ahsqcj3nokh0&amp;amp;q=pete+lund&amp;amp;as_filetype=pdf&amp;amp;cof=FORID%3A9&quot; target=&quot;_blank&quot;&gt;list of some of the SUGI, SAS Global Forum and SUG papers&lt;/a&gt; that Lund has published.
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/inside-sas-global-forum/&quot;&gt;Inside SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/papers-presentations/&quot;&gt;papers &amp;amp; presentations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-l/&quot;&gt;SAS-L&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Ps7p13skaho:5Z2MSkS5VnA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Ps7p13skaho:5Z2MSkS5VnA:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=Ps7p13skaho:5Z2MSkS5VnA:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Ps7p13skaho:5Z2MSkS5VnA:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/Ps7p13skaho&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 16 May 2012 13:00:48 +0000</pubDate>
</item>
<item>
	<title>BI Notes: SAS Stored Processes: 3 Tips to Improve Your Prompts</title>
	<guid>http://www.bi-notes.com/?p=3299</guid>
	<link>http://www.bi-notes.com/2012/05/sas-stored-processes-tips-for-building-better-promptsses/</link>
	<description>&lt;p&gt;&lt;div id=&quot;attachment_3302&quot; class=&quot;wp-caption alignright&quot;&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/rat-race-cartoon.jpg&quot;&gt;&lt;img class=&quot; wp-image-3302     &quot; title=&quot;http://www.cartoonaday.com/lifes-rat-race-cartoon/&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/rat-race-cartoon.jpg&quot; alt=&quot;rat race cartoon SAS Stored Processes: 3 Tips to Improve Your Prompts&quot; width=&quot;335&quot; height=&quot;270&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Image courtesy of  CartoonADay.Com&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;SAS stored processes are similar to SAS programs in that they use the same programming language.  Many of my SAS programs I created early on were only used by me, so I could live with  a little uncertainty and it was easy enough to check the logs for any issues.  If anything went wrong then I knew what I had to change.&lt;/p&gt;
&lt;p&gt;Stored processes required a whole new level of thinking &amp;#8211; my first few stored processes back in the SAS 9.1.3 days were &amp;#8211; well &lt;em&gt;they left a lot to be desired&lt;/em&gt;.  When I would roll out a new stored process I would often get a call from a user who had done something crazy and the stored process wouldn&amp;#8217;t work.  &lt;em&gt;For instance, why would anyone put a state name in a customer name field to see if it would return all the customers from that state&lt;/em&gt;?  Only one thing could happen &amp;#8211; no report!  &lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s some usability tricks that I have learned with my SAS Stored Processes to make them more robust and harder to break.  Really the out-of-the box prompts provide a lot of functionality that really helps. That&amp;#8217;s right &amp;#8211; let&amp;#8217;s build a better mousetrap!&lt;/p&gt;
&lt;h2&gt;Tip #1: Require an Answer for Your Prompt&lt;/h2&gt;
&lt;p&gt;If your SAS stored process code will break unless it gets a value from the prompt, require the user to have a value.  For example if your code is something like the following example, your stored process will fail if the user does not make a selection:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;proc print data=OPS.orders;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;where status = &amp;#8220;&amp;amp;StatusPrompt&amp;#8221;;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;run;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;One way around this situation is to require an answer. When you create the stored process, select the &lt;strong&gt;Requires a non-blank value&lt;/strong&gt; check box on the General pane.  With this selection, SAS will not let the user move forward without an answer. SAS adds an asterisk to the prompt and if the user selects Run without providing an answer, an error message is generated. Very nice built-in functionality.  It will save you hours of coding.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/STP_usable_01.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3304&quot; title=&quot;require the sas prompt to have an answer&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/STP_usable_01.png&quot; alt=&quot;STP usable 01 SAS Stored Processes: 3 Tips to Improve Your Prompts&quot; width=&quot;986&quot; height=&quot;413&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Tip #2: Provide a Default Value&lt;/h2&gt;
&lt;p&gt;Tip #1 can be annoying and you might want to make sure the prompt situation warrants it.  As an alternative you can also set a default value for the prompt. Based on the prompt type, there are many ways to indicate the value.  This does allow a user to just go with the defaults so the stored process does not generate an error message.  The only downside I see is if the user doesn&amp;#8217;t understand they can make changes &amp;#8211; but most people are computer-savvy enough that they can understand it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; Set the default value when testing your stored process so you don&amp;#8217;t have to fill out the values each time.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/STP_usable_02.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3306&quot; title=&quot;STP_usable_02&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/STP_usable_02.png&quot; alt=&quot;STP usable 02 SAS Stored Processes: 3 Tips to Improve Your Prompts&quot; width=&quot;1093&quot; height=&quot;558&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Tip #3:  Provide Minimum and Maximum Prompt Values&lt;/h2&gt;
&lt;p&gt;If you know the data starts at and ends in a certain time frame, then don&amp;#8217;t allow the user to select past those values.  Check the &lt;a title=&quot;SAS Stored Process: How do I use a Date Range Prompt?&quot; href=&quot;http://www.bi-notes.com/2011/12/prompts-how-do-i-use-a-date-range-prompt/&quot;&gt;SAS Stored Process: How do I use a Date Range Prompt?&lt;/a&gt; for an example of setting minimum and maximum date values. &lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s some examples to give you some other ideas. For numeric prompts, if you know the user cannot select a value greater than 100, then limit the value to 100.  Likewise, if you are allowing the user to type a value, then set the minimum value to 5.  It is more likely to be a word.  You have to decide based on your data &amp;#8211; but I hope this example just gives you some ideas of how to use the prompts built-in error-checking.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/STP_usable_03.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3305&quot; title=&quot;STP_usable_03&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/STP_usable_03.png&quot; alt=&quot;STP usable 03 SAS Stored Processes: 3 Tips to Improve Your Prompts&quot; width=&quot;915&quot; height=&quot;458&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;These built-in error checks from SAS will save you a lot of coding &amp;#8211; so use them to make your stored process more robust and usable.  But mainly to prevent users calling you to report what your stored process does not do.&lt;/p&gt;
&lt;h2&gt;Learn More about SAS Stored Processes and Prompts&lt;/h2&gt;
&lt;p&gt;
You can learn more tips and tricks for creating, debugging, and using SAS stored processes
in the &lt;a href=&quot;http://www.bi-notes.com/the-50-keys-to-learning-sas-stored-processes/&quot;&gt;&lt;i&gt;50 Keys to Learning SAS Stored Processes &lt;/i&gt; book.  
It's a complete guide to SAS stored processes! Download a sample chapter or view the table of contents. &lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;shortbus&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;betterrelated&quot;&gt;&lt;p&gt;&lt;strong&gt;Related content:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/11/sas-bi-prompts-framework-user-friendly/&quot; title=&quot;Permanent link to SAS BI Prompts: Gettin&amp;#8217; User Friendly&quot;&gt;SAS BI Prompts: Gettin&amp;#8217; User Friendly&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/12/prompts-how-do-i-use-a-date-range-prompt/&quot; title=&quot;Permanent link to SAS Stored Process: How do I use a Date Range Prompt?&quot;&gt;SAS Stored Process: How do I use a Date Range Prompt?&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/12/sas-prompts-how-do-you-use-a-variable-prompt/&quot; title=&quot;Permanent link to SAS Prompts: When do you use a Variable Prompt?&quot;&gt;SAS Prompts: When do you use a Variable Prompt?&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/09/stored-process-602/&quot; title=&quot;Permanent link to Stored Process: Need to prompt based on the first prompt value?&quot;&gt;Stored Process: Need to prompt based on the first prompt value?&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/09/building-sas-business-intelligence-book/&quot; title=&quot;Permanent link to Building Business Intelligence Using SAS Book&quot;&gt;Building Business Intelligence Using SAS Book&lt;/a&gt;  &lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 16 May 2012 11:38:11 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: The curious case of random eigenvalues</title>
	<guid>http://blogs.sas.com/content/iml/?p=5324</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/owl_hoUwONk/</link>
	<description>&lt;p&gt;
I've been a fan of statistical simulation and other kinds of computer experimentation for many years. For me, simulation is a good way to understand how the world of statistics works, and to formulate and test conjectures. Last week, while investigating &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/05/09/the-power-method/&quot;&gt;the efficiency of the power method&lt;/a&gt; for finding dominant eigenvalues, I generated symmetric matrices to use as test cases. Each element of the matrix was drawn randomly from U[0,1], the uniform distribution on the unit interval. As I checked my work for correctness, I noticed a few curious characteristics about the eigenvalues of these matrices:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; They have one positive dominant eigenvalue whose value is approximately &lt;em&gt;n&lt;/em&gt;/2, where &lt;em&gt;n&lt;/em&gt; is the size of the matrix.
&lt;/li&gt;&lt;li&gt;The other eigenvalues are distributed in a neighborhood of zero.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
I noticed that the same pattern held for all of my examples, so I turned to simulation to try to understand what was going on.
&lt;/p&gt;
&lt;h3&gt;The distribution of eigenvalues in random matrices&lt;/h3&gt;
&lt;p&gt;
I had previously explored the &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/03/28/generating-a-random-orthogonal-matrix/&quot;&gt;distribution of eigenvalues for random orthogonal matrices&lt;/a&gt; and shown that they have complex eigenvalues that are (asymptotically) distributed uniformly on the unit circle in the complex  plane. I suspected that a similar mathematical truth was behind the pattern I was seeing for random symmetric matrices.
&lt;/p&gt;&lt;p&gt;
The key statistical observation is that if the elements of a matrix are random variables, then the eigenvalues (which are the roots of a polynomial of those elements) are also random variables. As such, they have an expected value and a distribution. My conjecture was that the expected value of the largest eigenvalue was &lt;em&gt;n&lt;/em&gt;/2 and that the expected values of the smaller eigenvalues are clustered near zero.
&lt;/p&gt;&lt;p&gt;
In a series of simulations, I generated a large number of random symmetric &lt;em&gt;n&lt;/em&gt;x&lt;em&gt;n&lt;/em&gt; matrices with entries drawn from U[0,1]. For each matrix I computed the &lt;em&gt;n&lt;/em&gt; eigenvalues and stored them in a matrix with &lt;em&gt;n&lt;/em&gt; columns. Each row of this matrix contains the eigenvalues for one random symmetric matrix. The &lt;em&gt;i&lt;/em&gt;th column contains simulated values for the position of the &lt;em&gt;i&lt;/em&gt;th
 eigenvalue. (Recall that the EIGEN routine in SAS/IML software returns the eigenvalues in (descending) sorted order.) The following graph shows the distribution of eigenvalues for 5,000 random symmetric 10x10 matrices:
&lt;/p&gt;
&lt;a href=&quot;http://blogs.sas.com/content/iml/files/2012/05/evalsofrandom.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/evalsofrandom.png&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; class=&quot;alignnone size-full wp-image-5329&quot; /&gt;&lt;/a&gt;

&lt;p&gt;
Each color represents an eigenvalue, and the histogram of that color shows the distribution of the eigenvalue for 5,000 random 10x10 matrices. Notice that  the largest eigenvalue is always close to 5.  The largest eigenvalue has a distribution that looks like it might be approximately normally distributed. The distributions for the smaller eigenvalues overlap. A typical 10x10 matrix has 4 smaller positive eigenvalues, 4 smaller negative eigenvalues, and one eigenvalue whose expected value seems to be close to zero.
&lt;/p&gt;&lt;p&gt;
You can convince yourself that this result is reasonable by considering the constant matrix, &lt;em&gt;C&lt;/em&gt;,  for which every element is identically 0.5. (I got this idea from a paper that I will discuss later in this article.) This matrix &lt;em&gt;C&lt;/em&gt; is singular with &lt;em&gt;n-1&lt;/em&gt; zero eigenvalues. Because the sum of the eigenvalues is the trace of the matrix, &lt;em&gt;C&lt;/em&gt; has a single positive eigenvalue with value &lt;em&gt;n&lt;/em&gt;/2.  The random matrices that we are considering have an &lt;em&gt;expected value&lt;/em&gt; of 0.5 in each element, so it makes sense that the eigenvalues will be close to the eigenvalues of &lt;em&gt;C&lt;/em&gt;. 
&lt;/p&gt;
&lt;h3&gt;What happens for large matrices?&lt;/h3&gt;
&lt;p&gt;
I did a few more simulations with matrices of different sizes. The patterns were similar.  I suspected that there was an underlying mathematical theorem at work. As for orthogonal matrices, I conjectured that the theorem was probably an asymptotic result: as the size of the matrix gets large, the eigenvalues have certain statistical properties. To test my conjecture, I repeated the simulation for random 100x100 matrices.  The following graph shows the distribution of the eigenvalues for 5,000 simulated matrices:
&lt;/p&gt;
&lt;a href=&quot;http://blogs.sas.com/content/iml/files/2012/05/evalsofrandom2.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/evalsofrandom2.png&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; class=&quot;alignnone size-full wp-image-5331&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
The scale of the plot is determined by the distribution of the eigenvalue near 50=100/2. The other histograms are so scrunched up near zero that you can barely see their colors. 
&lt;/p&gt;
&lt;p&gt;
To better understand the expected values of the eigenvalues, I computed the means of each distribution. These sample means estimate the expected values of the eigenvalues for &lt;em&gt;n&lt;/em&gt;=100. For my simulated data, I found that the dominant eigenvalue is centered at 50.16. The confidence interval for that estimate does NOT include 50, so I would conjecture that the eigenvalue approaches &lt;em&gt;n&lt;/em&gt;/2 from above.
&lt;/p&gt;
&lt;p&gt;
If you plot a histogram of the non-dominant eigenvalues, you get the following graph:
&lt;/p&gt;

&lt;a href=&quot;http://blogs.sas.com/content/iml/files/2012/05/evalsofrandom3.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/evalsofrandom3.png&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; class=&quot;alignnone size-full wp-image-5347&quot; /&gt;&lt;/a&gt;

&lt;p&gt;
When I saw the shape of that histogram, I was surprised. I expected to see a uniform distribution. However, my intuition was mistaken and instead I saw a shape that curves down sharply at both ends. After I generated eigenvalues for even LARGER matrices, I commented to a colleague that &quot;it looks like the density is semi-circular.&quot; However, I had never encountered a semi-circular distribution before.
&lt;/p&gt;
&lt;h3&gt;Conjecture confirmed!&lt;/h3&gt;
&lt;p&gt;
At the end of my previous article, I mentioned a few of these conjectures  and asked if anyone knew of a theorem that describes the statistical properties of the eigenvalues of a random symmetric matrix. Remarkably, I had an answer within 24 hours. Professor Steve Strogatz from Cornell University, commented as follows:

&lt;blockquote&gt;
Each entry for such a matrix has an expected value of mu= 1/2, and there's a theorem by Furedi and Komlos that implies the largest eigenvalue in this case will be asymptotic to n*mu. That's why you are getting n/2. And the distribution of eigenvalues (except for this largest eigenvalue) will follow the Wigner semicircle law.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
The reference Strogatz cites is a 1981 article in &lt;em&gt;Combinatorica&lt;/em&gt; titled &quot;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.135.5293&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;The eigenvalues of random symmetric matrices&lt;/a&gt;.&quot; The first sentence of the paper is &quot;E. P. Wigner published in 1955 his famous semi-circle law for the distribution
of eigenvalues of random symmetric matrices.&quot;  I suppose &quot;famous&quot; is a relative term: I had never heard of the &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Semicircle_distribution&quot;&gt;Wigner semicircle distribution&lt;/a&gt;,&quot; but it is famous enough to have its own article in Wikipedia.
&lt;/p&gt;&lt;p&gt;
The paper goes on to formulate and prove theorems concerning the eigenvalues of random symmetric matrices. The theorems explain the phenomena that I noticed in my simulations, including that the dominant eigenvalue is approximately normally distributed and its expected value converges to &lt;em&gt;n&lt;/em&gt;/2 from above. See the paper for further details. 
&lt;/p&gt;

&lt;h3&gt;SAS Programs for simulation and analysis&lt;/h3&gt;
&lt;p&gt;
If you would like to conduct your own simulations, this section includes the SAS/IML program used to generate the symmetric random matrices. Although I generated the elements from U[0,1], Wigner's result holds for any distribution of elements, as do the results of Furedi and Komlos. The following program writes the eigenvalues to a SAS data set with 5,000 rows and &lt;em&gt;n&lt;/em&gt; variables named e1, e2, ..., e&lt;em&gt;n&lt;/em&gt;. The value of n is determined by the &lt;tt&gt;size&lt;/tt&gt; macro variable. 
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;%let size=10;  /* controls the size of the random matrix */
proc iml;
/* find eigenvalues of symmetric matrices with A[i,j]~U(0,1) */
NumSim = 5000;
call randseed(1);
&amp;nbsp;
n = &amp;amp;size;   
r = j(n*(n+1)/2, 1);/* allocate array for symmetric elements */
results = j(NumSim, n);
do i = 1 to NumSim;
   call randgen(r, &amp;quot;uniform&amp;quot;); /* fill r with U(0,1) */
   A = sqrvech(r);             /* A is symmetric */
   eval = eigval(A);           /* find eigenvalues */
   results[i,] = eval`;        /* save as ith row */
end;
&amp;nbsp;
labl = &amp;quot;e1&amp;quot;:(&amp;quot;e&amp;quot;+strip(char(n))); /* var names &amp;quot;e1&amp;quot;, &amp;quot;e2&amp;quot;, ... */
create Eigen from results[c=labl];
append from results;
close Eigen;
quit;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;p&gt;
The following SAS program is used to analyze the eigenvalues, including making the graphs shown in this article.
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;sas&quot;&gt;&lt;span&gt;/* make a histogram statement for e1-e&amp;amp;n */&lt;/span&gt;
&lt;span&gt;%macro&lt;/span&gt; eigenhist&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;
&lt;span&gt;%do&lt;/span&gt; i = &lt;span&gt;1&lt;/span&gt; &lt;span&gt;%to&lt;/span&gt; &lt;span&gt;&amp;amp;n&lt;/span&gt;;
   histogram e&lt;span&gt;&amp;amp;i&lt;/span&gt; / transparency = &lt;span&gt;0.7&lt;/span&gt;;
&lt;span&gt;%end&lt;/span&gt;;
&lt;span&gt;%mend&lt;/span&gt;;
&amp;nbsp;
&lt;span&gt;/* overlay distributions of e1-e&amp;amp;size */&lt;/span&gt;
&lt;span&gt;proc sgplot&lt;/span&gt; &lt;span&gt;data&lt;/span&gt;=eigen noautolegend;
%eigenhist&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;amp;size&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;
yaxis grid;
xaxis grid &lt;span&gt;label&lt;/span&gt;=&lt;span&gt;&amp;quot;Eigenvalue&amp;quot;&lt;/span&gt;;
&lt;span&gt;run&lt;/span&gt;;
&amp;nbsp;
&lt;span&gt;/* dist of expected values */&lt;/span&gt;
&lt;span&gt;/* compute mean of each variable (or use PROC SQL or PROC MEANS...) */&lt;/span&gt;
&lt;span&gt;proc iml&lt;/span&gt;;
use eigen;
read all &lt;span&gt;var&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;quot;e1&amp;quot;&lt;/span&gt;:&lt;span&gt;&amp;quot;e&amp;amp;size&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;into&lt;/span&gt; &lt;span&gt;X&lt;/span&gt;;
&lt;span&gt;close&lt;/span&gt; eigen;
&lt;span&gt;mean&lt;/span&gt; = T&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;mean&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;X&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;
&lt;span&gt;rank&lt;/span&gt; = T&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;amp;size&lt;/span&gt;,&lt;span&gt;1&lt;/span&gt;,-&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;; &lt;span&gt;/* 100, 99, ..., 1 */&lt;/span&gt;
&lt;span&gt;create&lt;/span&gt; EigMeans &lt;span&gt;var&lt;/span&gt; &lt;span&gt;&amp;#123;&lt;/span&gt;&lt;span&gt;&amp;quot;rank&amp;quot;&lt;/span&gt; &lt;span&gt;&amp;quot;Mean&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt;;
append;
&lt;span&gt;close&lt;/span&gt; EigMeans;
&lt;span&gt;quit&lt;/span&gt;;
&amp;nbsp;
&lt;span&gt;proc univariate&lt;/span&gt; &lt;span&gt;data&lt;/span&gt;=EigMeans;
&lt;span&gt;where&lt;/span&gt; rank&amp;lt;&lt;span&gt;&amp;amp;size&lt;/span&gt;;
&lt;span&gt;var&lt;/span&gt; &lt;span&gt;Mean&lt;/span&gt;;
histogram &lt;span&gt;Mean&lt;/span&gt;;
&lt;span&gt;run&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/matrix-computations/&quot;&gt;Matrix Computations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/numerical-analysis/&quot;&gt;Numerical Analysis&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/sampling-and-simulation/&quot;&gt;Sampling and Simulation&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=owl_hoUwONk:kM8FyoG0RdA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=owl_hoUwONk:kM8FyoG0RdA:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=owl_hoUwONk:kM8FyoG0RdA:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=owl_hoUwONk:kM8FyoG0RdA:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/owl_hoUwONk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 16 May 2012 09:23:59 +0000</pubDate>
</item>
<item>
	<title>AnnMaria's Blog: Text Mining with Statistica (or anything else) – look again!</title>
	<guid>http://www.thejuliagroup.com/blog/?p=2412</guid>
	<link>http://www.thejuliagroup.com/blog/?p=2412</link>
	<description>&lt;p&gt;There are some things to like about Statistica. The scatter plot matrix, for one. I&amp;#8217;d done a sentiment analysis of a data set on blog posts (not mine). For each post, I had three variables&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;number of negative sentiments expressed in the post,&lt;/li&gt;
&lt;li&gt;number of positive sentiments expressed in the post&lt;/li&gt;
&lt;li&gt;total number of comments that poster had made, ranging from 1 to over 1,000.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I thought people who comment a lot would be the ones who had the most negative comments, where there would not be as much of a correlation between positive comments and frequency.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I like the graphic output you get, which shows a frequency distribution for each variable and a plot for each pair. All at once you can get a sense of the strength of the correlation, whether it might be affected by restriction of range &amp;#8211; as shown by a skewed distribution &amp;#8211; or by outliers.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/sentiment1.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-2413&quot; title=&quot;sentiment1&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/sentiment1.png&quot; alt=&quot;Scatter plot of sentiment analysis&quot; width=&quot;928&quot; height=&quot;688&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There seems to be an actual correlation between the number of positive comments and the number of negative comments. Also, positive comments outnumber negative comments almost three to one.&lt;/p&gt;
&lt;p&gt;One might be tempted at this point to run out and say,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;Oh, look! Sentiment is very positive!&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Also, it appears that people who have more negative comments also have more positive comments, this means that &amp;#8230;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Just stop right there.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before saying this means anything, you should go back and take a look at the comments being categorized as positive or negative. The first thing you will note is that computers are very poor at detecting sarcasm, subject changes and idioms. The data came from comments on blogs related to Apple computer products. Here are just a few of the cases where I disagreed with the computer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#8220;Yeah, tell us you&amp;#8217;ll improve conditions at your manufacturing plant in China. That would be great, wouldn&amp;#8217;t it?&amp;#8221;  (Includes &amp;#8220;improving&amp;#8221; and &amp;#8220;great&amp;#8221; so counted as two positive sentiments).&lt;/li&gt;
&lt;li&gt;&amp;#8220;I&amp;#8217;d rather not  say nice try, but &amp;#8230; &amp;#8221; (Counts as one positive comment, with the word, &amp;#8220;nice&amp;#8221;)&lt;/li&gt;
&lt;li&gt;&amp;#8220;Buy Windows! It&amp;#8217;s superior&amp;#8221;  (Counts as one positive comment, with the word, &amp;#8220;superior&amp;#8221;)&lt;/li&gt;
&lt;li&gt;&amp;#8220;Too bad I can&amp;#8217;t buy it right now.&amp;#8221; (Counts as negative, with the word &amp;#8220;bad&amp;#8221;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;m not saying that Statistica is bad  - I don&amp;#8217;t think it is &amp;#8211; or that text mining is useless &amp;#8211; I don&amp;#8217;t think that, either.&lt;/p&gt;
&lt;p&gt;What I DO think is that text mining has to be an iterative process. First, you get your results and then you examine them, make some changes &amp;#8211; in this case I would start with the synonyms data &amp;#8211; and you re-run your analysis.&lt;/p&gt;
&lt;p&gt;Off to bed. I have to be up in six hours and head to the Black Belt Magazine studios for a photo shoot on our new book that is coming out this fall, Winning on the Ground: Championship matwork for judo, grappling and mixed martial arts.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a bit of a leap from text mining, but, variety&lt;em&gt; IS&lt;/em&gt; the spice of life.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
	<pubDate>Wed, 16 May 2012 08:38:11 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: How much time will your process flow take to run?</title>
	<guid>http://blogs.sas.com/content/sasdummy/?p=2146</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/BG1Ng5mOAvI/</link>
	<description>&lt;p&gt;SAS users, by definition, do not embrace the mysterious.&lt;/p&gt;
&lt;p&gt;That's one of the main reasons that they use SAS: to demystify some data or process.  And so, when you (as a SAS user) have gone to the trouble of designing a process flow in SAS Enterprise Guide, you like to be aware of some basic metrics, such as &quot;how long will it take to run?&quot;&lt;/p&gt;
&lt;p&gt;It's difficult to predict how long a SAS process will take to run, as it depends more upon the data than on the actual program instructions.  But one thing that we're very good at is telling you &lt;strong&gt;how long it took to run the last time that you ran it&lt;/strong&gt;.  In SAS Enterprise Guide, you can find this information at the task level by right-clicking on the task (or program node) and selecting &lt;strong&gt;Properties&lt;/strong&gt;.  On the General tab, you'll see the &quot;&lt;strong&gt;Last execution time&lt;/strong&gt;&quot;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/howlong_task.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/howlong_task.png&quot; alt=&quot;How long did the task take?&quot; width=&quot;519&quot; height=&quot;274&quot; class=&quot;alignnone size-full wp-image-2147&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to gather this information at a process flow or project level, you can repeat these steps for each item in the flow, make a note of the &quot;execution time&quot;, then add up the numbers (expressed in hours, minutes, and seconds) to create a grand total.  This tedious assignment makes for a perfect torture device for a summer intern who, in this economy, should be grateful to have a job at all.&lt;/p&gt;
&lt;p&gt;Or, to make the job less tedious, you could use the &lt;strong&gt;Project Reviewer&lt;/strong&gt; task.  This is a custom task (&lt;a href=&quot;http://support.sas.com/documentation/onlinedoc/guide/customtasks/samples/ProjectReviewer.zip&quot; title=&quot;here's where you can get it&quot;&gt;available for download here&lt;/a&gt;) that shows a summary view of your process flows and allows you to create a report from the information.  The task works with SAS Enterprise Guide 4.3 and 5.1.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/projectreviewer_annotated.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/projectreviewer_annotated.png&quot; alt=&quot;Project Reviewer screenshot&quot; width=&quot;550&quot; class=&quot;alignnone size-full wp-image-2152&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Features of the Project Reviewer task include:&lt;br /&gt;
&lt;strong&gt;1.&lt;/strong&gt; A selection list with all of the process flows within your project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; A list of each &quot;runnable&quot; task; that is, program, task, query, export step, etc.  Each task has an &quot;ordinal&quot; (its sequence in the process flow), a name, a descriptive type, the user ID of the last person to modify it, the running time for its most recent iteration, the date/time modified, the date/time created, and whether the task generated errors (&quot;red X&quot; in the flow).  &lt;/p&gt;
&lt;p&gt;You can sort the items in the list by clicking on the column header for the value you want to sort.  Click on the column header again to reverse the sort sequence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; A summary of the task count, and total clock time that &quot;running&quot; the flow represents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; A &lt;strong&gt;Create Report&lt;/strong&gt; button, which generates a SAS program to produce a simple report of all of the project contents, summarized by each process flow.  If you have multiple SAS environments, you can use the &lt;strong&gt;Report server&lt;/strong&gt; list to select which SAS server to use when processing the report.&lt;/p&gt;
&lt;p&gt;Here's a sample of the report output:&lt;br /&gt;
&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/projectreviewer_report.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/projectreviewer_report.png&quot; alt=&quot;Sample project reviewer report&quot; width=&quot;550&quot; class=&quot;alignnone size-full wp-image-2155&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
The reporting process also generates a SAS program and a data set (which are added to your project), so that you can easily adapt these for custom reports.&lt;/p&gt;
&lt;p&gt;Let me know if you find this task to be useful and whether you have any improvements to suggest.  &lt;/p&gt;
&lt;p&gt;Some final notes/links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://support.sas.com/documentation/onlinedoc/guide/customtasks/samples/ProjectReviewer.zip&quot; title=&quot;download the ZIP archive&quot;&gt;Download location for the Project Reviewer task (ZIP file)&lt;/a&gt;.  The ZIP file includes the task DLL and a README.PDF document with instructions for how to install and use the task.&lt;/li&gt;
&lt;li&gt;Related tip: &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2009/05/26/tracking-progress-in-sas-programs-in-sas-enterprise-guide/&quot; title=&quot;Handy tip for monitoring progress interactively&quot;&gt;Using the SYSECHO statement to track progress of SAS programs in SAS Enterprise Guide.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SAS Enterprise Guide hotfix locations: &lt;a href=&quot;http://ftp.sas.com/techsup/download/hotfix/HF2/C44.html&quot;&gt;4.305 with 9.2&lt;/a&gt;, &lt;a href=&quot;http://ftp.sas.com/techsup/download/hotfix/HF2/E66.html&quot;&gt;4.305 with 9.3&lt;/a&gt;, and &lt;a href=&quot;http://ftp.sas.com/techsup/download/hotfix/HF2/G35.html&quot;&gt;5.1&lt;/a&gt; - if you intend to use this task along with &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/17/doing-more-with-sas-enterprise-guide-automation/&quot; title=&quot;doing more with EG automation&quot;&gt;SAS Enterprise Guide automation&lt;/a&gt; (for example, in a scheduled project), you'll need the latest hotfixes for proper operation&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/process-flows/&quot;&gt;process flows&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/custom-tasks/&quot;&gt;SAS custom tasks&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/sas-enterprise-guide/&quot;&gt;SAS Enterprise Guide&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=BG1Ng5mOAvI:lTIQwUFrdcI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=BG1Ng5mOAvI:lTIQwUFrdcI:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=BG1Ng5mOAvI:lTIQwUFrdcI:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?i=BG1Ng5mOAvI:lTIQwUFrdcI:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=BG1Ng5mOAvI:lTIQwUFrdcI:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?i=BG1Ng5mOAvI:lTIQwUFrdcI:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/BG1Ng5mOAvI&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 15 May 2012 15:02:32 +0000</pubDate>
</item>
<item>
	<title>Key Happenings at support.sas.com: Building great graphs with Base SAS</title>
	<guid>http://blogs.sas.com/content/supportnews/?p=327</guid>
	<link>http://feedproxy.google.com/~r/UpdatesInSasOnlineSupport/~3/RqErkderNuk/</link>
	<description>~ Contributed by Lelia McConnel, Technical Support Consultant, SAS ~ Base SAS 9.3 has made creating high quality graphics output easier than ever. Did you know that you can create great looking, high resolution graphs with Base SAS? The Customer Support Website provides sample code to help you create graphs [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=RqErkderNuk:2iD_yxicmeg:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=RqErkderNuk:2iD_yxicmeg:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=RqErkderNuk:2iD_yxicmeg:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?i=RqErkderNuk:2iD_yxicmeg:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=RqErkderNuk:2iD_yxicmeg:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?i=RqErkderNuk:2iD_yxicmeg:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=RqErkderNuk:2iD_yxicmeg:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?i=RqErkderNuk:2iD_yxicmeg:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/UpdatesInSasOnlineSupport/~4/RqErkderNuk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 15 May 2012 14:57:06 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Help us improve your conference experience</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2757</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/dXPXK3kKRIc/</link>
	<description>SAS Publications participates in a number of conferences, from SAS events to solution and industry-focused conferences. We know our customers are looking to make the most of their conference experience, and we want to make your visit to the Exhibit Hall as helpful as possible. We want to know your [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=dXPXK3kKRIc:rlzFuR-yNio:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=dXPXK3kKRIc:rlzFuR-yNio:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/dXPXK3kKRIc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 15 May 2012 14:48:19 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: A QUEST to learn SAS …</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3037</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/Vv6qY-4C_ss/</link>
	<description>&lt;p&gt;As a SAS fan, in a number of roles over the past 15+ years (programmer, statistician, data warehouse developer, business analyst, consultant, trainer, partner), I am also the &lt;a title=&quot;Queensland Users Exploring SAS Technology (QUEST)&quot; href=&quot;http://www.sas.com/offices/asiapacific/sp/usergroups/quest/&quot; target=&quot;_blank&quot;&gt;Queensland Users Exploring SAS Technology (QUEST)&lt;/a&gt; chairperson, and I feel very privileged to be able to contribute to the wider SAS community in this blog post.&lt;/p&gt;
&lt;p&gt;QUESTors meet four times each year at a venue in central Brisbane, Australia. At the next QUEST meeting, held May 31, I will be presenting &lt;strong&gt;&lt;em&gt;Learning SAS – where to start?, what is available?, how can I network?, who should I know?&lt;span id=&quot;more-3037&quot;&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignright size-medium wp-image-3047&quot; src=&quot;http://blogs.sas.com/content/sgf/files/2012/05/Quest-300x224.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;224&quot; /&gt;Having recently attended the SAS Global Forum in Orlando, Florida I was inspired by Joe Theismann’s Keynote Presentation, &lt;a href=&quot;http://www.sas.com/knowledge-exchange/customer-intelligence/featured/secondary-feature/business-lessons-for-marketers-from-joe-theisman/index.html&quot;&gt;&lt;strong&gt;&lt;em&gt;Game Plan for Success&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/strong&gt;where he spoke about his life experiences and his steadfast attitude towards life.  What interested me was his approach to life in adapting to change. He spoke about his injuries, and the paths he has taken, with passion and enthusiasm.&lt;/p&gt;
&lt;p&gt;Passion and enthusiasm is something I have always enjoyed in my journey with SAS, and I get a buzz out of sharing with other SAS users in the community. Whether you’re a seasoned SAS user with experiences to share, or a newcomer who’d like to interact with other users, a SAS user group and the many internet-based networking mediums are an excellent way to learn, network, share and collaborate with your local SAS community and beyond. And, as in the words of Joe … &lt;em&gt;“People don’t care about how much you know, until they know how much you care” &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My presentation is a guide for programmers and non-programmers (analysts, business users, administrators, management) about learning SAS and connecting with SAS users.&lt;/p&gt;
&lt;h2&gt;Where to start?&lt;/h2&gt;
&lt;p&gt;First stop is to gain an understanding of the SAS 9 architecture, the components and how they fit together. This can be easily achieved by reading the SAS 9.3 &lt;a href=&quot;https://support.sas.com/pubscat/bookdetails.jsp?catid=1&amp;amp;pc=63143&quot; target=&quot;_blank&quot;&gt;Intelligence Platform: Overview&lt;/a&gt; document. This document is available on the support.sas.com website, which contains a plethora of information relating to documentation, training, support and access to the SAS community.&lt;/p&gt;
&lt;h2&gt;What is available?&lt;/h2&gt;
&lt;p&gt;Get to know your local and global resources. Reach out to the people in your local SAS office, SAS partners in your area and other SAS users. Or use websites such as support.sas.com, communities.sas.com, blogs.sas.com, sascommunity.org, LinkedIn.com groups, and sasprofessionals.net for resources and experts.&lt;/p&gt;
&lt;h2&gt;How can I network?&lt;/h2&gt;
&lt;p&gt;Going to your SAS local user group is a good first step. Of course there’s social media too, which is also a great way for introverts to interact. These include Twitter, Facebook, LinkedIn, YouTube, Blogs and discussion forums. Pick the platform that you use most often and/or subscribe to RSS feeds and keep up-to-date using a RSS reader such as &lt;a href=&quot;http://www.google.com/reader&quot;&gt;Google Reader&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Who should I know?&lt;/h2&gt;
&lt;p&gt;You could start off by getting to know the people in your local community. Perhaps aim to meet one new person at each local SAS user group event and maybe connect with them on LinkedIn. Be involved in the discussion forums in your area of interest and leave comments on blog posts. It comes down to your interests and what you would like to learn. There are many ways to connect, participate and collaborate – taking the first step can be the hardest. As Chris Hemedinger said in the closing session of SAS Global Forum 2012 “&lt;em&gt;Social media has spoiled us … information comes to us, we don’t have to find it.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I hope you too can see that there are many opportunities available in your QUEST to learn SAS – you just have to use them….&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;&lt;strong&gt;Register for QUEST by Thursday May 24 by emailing us at &lt;a href=&quot;mailto:quest@oz.sas.com&quot;&gt;quest@oz.sas.com&lt;/a&gt;. &lt;/strong&gt;&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;&lt;strong&gt;OR register online at &lt;a href=&quot;http://www.sas.com/australia/usergroups/quest&quot;&gt;www.sas.com/australia/usergroups/quest&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;wp-image-3041 alignleft&quot; src=&quot;http://blogs.sas.com/content/sgf/files/2012/05/QUEST-agenda-1024x723.png&quot; alt=&quot;&quot; width=&quot;655&quot; height=&quot;462&quot; /&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/local-users-groups-2/&quot;&gt;local users groups&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/papers-presentations/&quot;&gt;papers &amp;amp; presentations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/quest/&quot;&gt;QUEST&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Vv6qY-4C_ss:peTOPtxAoV0:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Vv6qY-4C_ss:peTOPtxAoV0:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=Vv6qY-4C_ss:peTOPtxAoV0:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Vv6qY-4C_ss:peTOPtxAoV0:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/Vv6qY-4C_ss&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 15 May 2012 09:00:48 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: SESUG junior professional grants</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3064</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/HFh3rAqcAvg/</link>
	<description>&lt;p&gt;&lt;a title=&quot;SESUG&quot; href=&quot;http://www.sesug.org/SESUG2012/index.php&quot; target=&quot;_blank&quot;&gt;SESUG&lt;/a&gt; (Southeast SAS Users Group Conference) is an annual conference held in the Southeast US - typically in September or October. This year, the conference will be held at the Sheraton Imperial Hotel and Convention Center in Durham, North Carolina, October 14-16.  &lt;/p&gt;
&lt;p&gt;According to Peter Eberhardt, SESUG 2012 Academic Chair, the SESUG 2011 Junior Professional Program (new in 2011) was very successful. &quot;I am proud to say, that for 2012 we are continuing the program. Check out our &lt;a href=&quot;http://www.sesug.org/SESUG2012/JuniorProfessional.php&quot; target=&quot;_blank&quot;&gt;website&lt;/a&gt; for more details.&quot;&lt;/p&gt;
&lt;p&gt;The grant covers conference registration and one four-hour workshop.  Workshops will be offered on Sunday at 11:30 am.  Travel expenses and food are not covered.  Junior Professionals presenting a paper will get priority consideration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To qualify, applicants must have been using SAS in their job for 36 months or less and would otherwise not be funded by their company to attend the conference.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&quot;The important date to remember is June 4, when applications will be available,&quot; says Eberhardt. &quot;But, you don't have to wait until then to get more information. Check out our website and contact Barbara or Deb with any questions you might have.&quot;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/junior-professional-program/&quot;&gt;Junior Professional Program&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sesug/&quot;&gt;SESUG&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/us-regional-conferences/&quot;&gt;US Regional Conferences&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=HFh3rAqcAvg:Sh0MKYtrbVw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=HFh3rAqcAvg:Sh0MKYtrbVw:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=HFh3rAqcAvg:Sh0MKYtrbVw:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=HFh3rAqcAvg:Sh0MKYtrbVw:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/HFh3rAqcAvg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 14 May 2012 13:00:08 +0000</pubDate>
</item>
<item>
	<title>BI Notes: SAS Global Forum: Here’s the Wrap Up!</title>
	<guid>http://www.bi-notes.com/?p=3207</guid>
	<link>http://www.bi-notes.com/2012/05/sas-global-forum-heres-the-wrap-up/</link>
	<description>&lt;p&gt;SAS Global Forum 2012 was a success! After a whirlwind week of activities followed by a vacation and week of rest &amp;#8211; I&amp;#8217;m ready to give you some highlights.  It was a lot of fun! Tip: Click on any picture to enlarge it.&lt;/p&gt;
&lt;table border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;h2&gt;Day 1 &amp;#8211; Saturday Ready for the Tweet-Up&lt;/h2&gt;
&lt;p&gt;The biggest drama was at the airport &amp;#8211; our flight was delayed due to mechanical failure so I decided it might be better to take a later flight. Met &lt;a href=&quot;https://twitter.com/#!/Steve0verton&quot;&gt;@Steve0verton&lt;/a&gt; at the airport and &lt;a href=&quot;https://twitter.com/#!/philihp&quot;&gt;@PhilipB&lt;/a&gt; who were both headed to Orlando.  As a result of the later flight we were late to the Tweet-Up so we missed the first round of drinks.  It was sunset when we landed and the weather was mild &amp;#8211; very nice for Florida.&lt;/p&gt;
&lt;p&gt;We had a lot of fun.  &lt;a href=&quot;http://twitter.com/WaynetteTubbs&quot;&gt;@WaynetteTubbs&lt;/a&gt; hosted the even and she had a trivia contest.  I won a LED key chain and some SAS Post-It notes.  I love Post-It notes. Plus I got to meet &lt;a href=&quot;https://twitter.com/#!/annmariastat&quot;&gt;Anna Maria&lt;/a&gt; who writes the sassy &lt;a href=&quot;http://www.thejuliagroup.com/blog/&quot;&gt;Julia Group&lt;/a&gt; blog &amp;#8211; she&amp;#8217;s such a sweetie.  And&lt;a href=&quot;http://www.linkedin.com/in/andreawainwrightzimmerman&quot;&gt; Andrea Wainwright Zimmerman&lt;/a&gt; told me that she was the academic chair for SESUG in St. Pete, FL next year.  I may have to volunteer &amp;#8211; sounds like a conference I don&amp;#8217;t want to miss. Plus if I&amp;#8217;m not mistaken she also won one of the best contributed paper awards. [Check out: &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/264-2012.pdf&quot;&gt;Quick and Dirty Excel® Workbooks Without DDE or ODS&lt;/a&gt; - a little birdie told me it was one of the most popular papers in the session!]&lt;/p&gt;
&lt;p&gt;&lt;div id=&quot;attachment_3259&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a title=&quot;SAS Global Forum 2012 Day 1&quot; href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day1.png&quot;&gt;&lt;img class=&quot;size-full wp-image-3259 &quot; title=&quot;SAS Global Forum 2012 Day 1&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day1.png&quot; alt=&quot;sgf2012 day1 SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;728&quot; height=&quot;613&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;SAS Global Forum 2012 Day 1&lt;/p&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;h2&gt;Day 2 &amp;#8211; Sunday Opening Session&lt;/h2&gt;
&lt;p&gt;Definitely had too much fun on Saturday night &amp;#8211; just some helpful advise &amp;#8211; never forget to bring aspirin!  It didn&amp;#8217;t matter I was still ready to get registered.  &lt;a href=&quot;https://twitter.com/#!/angelahall1&quot;&gt;@AngelaHall1&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/#!/Steve0verton&quot;&gt;@Steve0verton&lt;/a&gt;, and I had a good time hanging at breakfast and walking around the beautiful Disney property. Angela and I were discussing a new book about Dashboards. We would like to include videos this time around &amp;#8211; what do you think?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/#!/gtcox76&quot;&gt;@GordonCox&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/#!/gregorysnelson&quot;&gt;Greg Nelson&lt;/a&gt; taught an 8 AM class about SAS BI System Administration, which I only &lt;a href=&quot;http://blogs.sas.com/content/sgf/2012/04/26/my-sas-global-forum-2012/&quot;&gt;heard good things about&lt;/a&gt;. &lt;a href=&quot;https://twitter.com/#!/saspublishing&quot;&gt;@saspublishing&lt;/a&gt; might have new book authors![Hey - if you have a book idea tweet &lt;a href=&quot;https://twitter.com/#!/SSessoms&quot;&gt;@SSessoms&lt;/a&gt; about it!]  &lt;/p&gt;
&lt;p&gt;After a great lunch with &lt;a href=&quot;http://www.sierrainformation.com/bio.php&quot;&gt;Andrew Karp&lt;/a&gt;, who runs the Sierra Information Systems site (he has &lt;a href=&quot;http://www.sierrainformation.com/html/past_presentations_entry.php&quot;&gt;some free SAS presentation offers after you sign up&lt;/a&gt;), it was back to the beautiful resort to wait for the Demo Hall to open! At 4pm we were finally able to enter the Demo Hall so I could find the winner of the &lt;a title=&quot;The 50 Keys to Learning SAS Stored Processes&quot; href=&quot;http://www.bi-notes.com/the-50-keys-to-learning-sas-stored-processes/&quot;&gt;50 Keys to Learning SAS Stored Processes&lt;/a&gt; book &amp;#8211; which was &lt;a href=&quot;https://twitter.com/#!/HomesAtMetacoda&quot;&gt;Michelle Homes&lt;/a&gt;.  She was working the &lt;a href=&quot;http://www.metacoda.com/en/&quot;&gt;Metacoda&lt;/a&gt; booth. So she gave me a demonstration of the &lt;a href=&quot;http://www.metacoda.com/en/&quot;&gt;Metacode Security Plug-in&lt;/a&gt; &amp;#8211; it is AWESOME! It makes managing your SAS BI users a snap. Look for a later post about this SAS Management Console Plug-In, which her wonderful husband&lt;a href=&quot;https://twitter.com/#!/PaulAtMetacoda&quot;&gt; Paul Homes&lt;/a&gt; coded all by himself.     &lt;/p&gt;
&lt;p&gt;At the evening party I finally got to meet &lt;a href=&quot;http://www.linkedin.com/in/cswenson&quot;&gt;Chris Swenson&lt;/a&gt; and talk about blogging for an hour or so.  Also had not seen &lt;a href=&quot;http://www.linkedin.com/in/bzenick&quot;&gt;Ben Zenick&lt;/a&gt; in a month of Sundays &amp;#8211; so it was awesome catching up with him.  [SAS BI developers looking for a job ... check out &lt;a href=&quot;http://www.zencos.com/&quot;&gt;Zencos&lt;/a&gt;.] &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day2.png&quot;&gt;&lt;img class=&quot;size-full wp-image-3258 aligncenter&quot; title=&quot;SAS Global Forum 2012 Day 2&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day2.png&quot; alt=&quot;sgf2012 day2 SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;825&quot; height=&quot;908&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The opening ceremony was something else.  It was huge room so you can get an idea of how large the screens were.  The graphics were beautiful &amp;#8211; the follow :30 second clip gives you an idea of how amazing the entire presentation was.  I really enjoyed watching Dr. G get behind the computer to drive the new High Performance Analytics software &amp;#8211; turn an 18 hour job into 14 minute one.  Wow &amp;#8211; that&amp;#8217;s intense.  Here&amp;#8217;s the&lt;a href=&quot;http://livestre.am/1FB1S&quot;&gt; Livestream of the Opening Ceremony&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;   &lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;h2&gt;Day 3 &amp;#8211; Conference Begins!&lt;/h2&gt;
&lt;p&gt;Attended &lt;a href=&quot;https://twitter.com/#!/Steve0verton&quot;&gt;@Steve0verton&lt;/a&gt; award-winning presentation, &amp;#8220;&lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2012/winners.html&quot;&gt;&lt;cite&gt;Lost in Wonderland? Methodology for a Guided Drill-Through Analysis Out of the Rabbit Hole&lt;/cite&gt;&lt;/a&gt;&lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/020-2012.pdf&quot;&gt;?&lt;/a&gt;&amp;#8220;. After his presentation he was mobbed by folks wanting to ask questions about BI.  I caught up with &lt;a href=&quot;https://twitter.com/#!/gregorysnelson&quot;&gt;Greg Nelson&lt;/a&gt; later in the day as he was being interviewed by &lt;a href=&quot;http://www.allanalytics.com/&quot;&gt;AllAnalytics.com&lt;/a&gt; for their man on the street at SAS Global Forum. In the evening there was a huge party in the demo hall, lots of people milling about checking out all the new toys from SAS and other vendors.  Oooh &amp;#8230; got to see &lt;a href=&quot;http://support.sas.com/publishing/authors/henderson.html&quot;&gt;Don Henderson&lt;/a&gt;&amp;#8216;s super cool new book&lt;a href=&quot;http://support.sas.com/publishing/authors/henderson.html&quot;&gt; &lt;strong&gt;&lt;em&gt;SAS Server Pages: Generating Dynamic Content&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; - it&amp;#8217;s an online book with videos.  It&amp;#8217;s such a super cool idea!!  &lt;/p&gt;
&lt;p&gt;The highlight of the day was attending the Authors&amp;#8217; Dinner.  I sat with &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/&quot;&gt;Chris H&lt;/a&gt; (a real SAS Dummy) and &lt;a href=&quot;http://www.linkedin.com/in/julieplatt&quot;&gt;Julie Pratt&lt;/a&gt; (my favorite editor at SAS Press).  It was a great combination of fun, food, and friends.  I laughed so hard my stomach hurt.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day3a.png&quot;&gt;&lt;img class=&quot;size-full wp-image-3275 alignleft&quot; title=&quot;sas global forum opening day&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day3a.png&quot; alt=&quot;sgf2012 day3a SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;968&quot; height=&quot;792&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;h2&gt;Day 4 &amp;#8211; Presentation Day&lt;/h2&gt;
&lt;p&gt;Tuesday was our big presentation day for &amp;#8220;&lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/010-2012.pdf&quot;&gt;Get Your Fast Pass to Building Business Intelligence with SAS and Google Analytics&lt;/a&gt;&amp;#8220;.  It was a great turnout &amp;#8211; over 125 people and standing room only.  SAS Press gave away a free copy of the book, which a lovely lady from Western Kentucky won.  Special thanks to &lt;a href=&quot;http://www.linkedin.com/in/nancybrucken&quot;&gt;Nancy Brucken&lt;/a&gt; for section chair for hiding the post-it note under a chair at the last minute!!  You rock!!!  We were so pleased that everyone enjoyed our presentation and had so many nice things to say about it. [We love praise! And hey ... &lt;a title=&quot;Peek Inside: Building Business Intelligence with SAS: Content Development Examples&quot; href=&quot;http://www.bi-notes.com/sas-bi-book-all-about/&quot;&gt;we wrote a book&lt;/a&gt;!!!!] &lt;a href=&quot;http://www.sasanalysis.com/&quot;&gt;Charlie Huang&lt;/a&gt; attended the presentation and we chatted more about using Google Analytics.&lt;/p&gt;
&lt;p&gt;Angela told me that she ran into a group of users who had 5 copies of the Building Business Intelligence Book at their office &amp;#8230; Wow!  Sounds like that team is going to be SAS BI Driven!&lt;/p&gt;
&lt;p&gt;Later I attended &lt;a href=&quot;http://www.linkedin.com/in/KirkPaulLafler&quot;&gt;Kirk Paul Lafler&amp;#8217;s&lt;/a&gt; talk about &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/357-2012.pdf&quot;&gt;Top Ten SAS Performance Tuning Techniques&lt;/a&gt;. Picked up some thoughts about how the I/O may be causing more issues than I had considered before. He also gave me a SAS Nerd ribbon to wear &amp;#8211; first I had to proclaim my undying loyalty to SAS.  Easy!  Afterwards, Angela and Brent Whitesel talking &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/369-2012.pdf&quot;&gt;about changing your metadata&lt;/a&gt; &amp;#8211; very enlightening. I volunteered to help with a few afternoon sessions &amp;#8211; it was fun I encourage you to do it also!&lt;/p&gt;
&lt;p&gt;In the evening I had dinner with a large group at Shula&amp;#8217;s.  &lt;a href=&quot;http://www.allanalytics.com/author.asp?section_id=1411&quot;&gt;Beth Schultz&lt;/a&gt; the AllAnalytics.Com editor joined us. Judging from &lt;a href=&quot;http://www.allanalytics.com/video.asp?section_id=1860&amp;amp;doc_id=243062&quot;&gt;her subsequent video blog&lt;/a&gt;, I think she caught the SAS bug and she&amp;#8217;s not even a user! [Oops!]&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day4a.png&quot;&gt;&lt;img class=&quot;size-full wp-image-3276 alignleft&quot; title=&quot;SAS Global Forum 2012 Day 4&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day4a.png&quot; alt=&quot;sgf2012 day4a SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;1226&quot; height=&quot;634&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;h2&gt;Day 5 &amp;#8211; Over so Quick?&lt;/h2&gt;
&lt;p&gt;Last day of the conference is sad but I was so tired I could hardly hold my head up. Guess I need more than 4 -5 hours of sleep a nite. While waiting to get our makeup put on, &lt;a href=&quot;http://blogs.sas.com/content/sgf/2012/04/30/sas-global-forum-chair-andrew-kuligowski-just-another-face-in-the-crowd/&quot;&gt;Andrew T. Kuligowksi&lt;/a&gt; dropped by to wish us good luck.  We appreciated his thoughtfulness considering how busy he was!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.linkedin.com/pub/eric-rossland/2/699/b00&quot;&gt;Eric&lt;/a&gt;, Angela, and I presented a SAS Talk about business intelligence that really put us on the spot! It was fun but a little scary. Roxie put a lot of makeup on us! [Chris talks about the &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/29/the-makeup-of-sas-global-forum/&quot;&gt;makeup of SAS Global Forum&lt;/a&gt;.]  After we got all gussied-up, we were ready to talk to the users. The worse part is that it was hard to hear the audience questions.  So I know for a few questions we just heard a keyword and just started talking about that subject. So if you think we gave you a goofy answer &amp;#8211; we didn&amp;#8217;t hear you.  Thanks to all the audience members who asked questions and encouraged us &amp;#8211; we could not have done it without you. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day4.png&quot;&gt;&lt;img class=&quot;size-full wp-image-3256 aligncenter&quot; title=&quot;SAS Global Forum 2012 Day 5&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012_day4.png&quot; alt=&quot;sgf2012 day4 SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;965&quot; height=&quot;551&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And just like that &amp;#8230; it was time for the closing session.  Chris closed the conference with some High Performance&lt;em&gt; blah, blah, blah&lt;/em&gt;. I didn&amp;#8217;t get to see everything I wanted or talk to everyone I wanted &amp;#8230; guess I&amp;#8217;ll see you in San Francisco!  Here were &lt;a href=&quot;http://blogs.sas.com/content/sgf/2012/04/30/four-tips-for-surviving-sas-global-forum/&quot;&gt;my tips for surviving the conference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/SGF2012-071.jpg&quot;&gt;&lt;img class=&quot;wp-image-3279 aligncenter&quot; title=&quot;SGF2012 blah blah blah&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/SGF2012-071.jpg&quot; alt=&quot;SGF2012 071 SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;933&quot; height=&quot;697&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt; Really needed a vacation after all of that excitement.  We ran over to Tampa for a few days &amp;#8211; sunsets over the bay and fancy Aussie wine!  I miss all the SAS nerds &amp;#8212; &lt;em&gt;group hug&lt;/em&gt;!!!! xoxoxox&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012-294.jpg&quot;&gt;&lt;img class=&quot;aligncenter  wp-image-3284&quot; title=&quot;SAS Global Forum 2012 - Tampa Bay Afterwards&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/sgf2012-294.jpg&quot; alt=&quot;sgf2012 294 SAS Global Forum: Heres the Wrap Up!&quot; width=&quot;1089&quot; height=&quot;813&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;betterrelated&quot;&gt;&lt;p&gt;&lt;strong&gt;Related content:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/04/sas-global-forum-orlando-here-i-come-im-so-pumped/&quot; title=&quot;Permanent link to SAS Global Forum: Orlando, Here I Come!  I&amp;#8217;m so Pumped!!&quot;&gt;SAS Global Forum: Orlando, Here I Come!  I&amp;#8217;m so Pumped!!&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/03/sas-global-forum-2012-will-i-see-you-there/&quot; title=&quot;Permanent link to SAS Global Forum 2012: Will I See You There?&quot;&gt;SAS Global Forum 2012: Will I See You There?&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/01/sas-global-forum-is-google-analytics-a-good-subject/&quot; title=&quot;Permanent link to SAS&amp;reg; Global Forum: Is Google Analytics and SAS BI a good subject?&quot;&gt;SAS&amp;reg; Global Forum: Is Google Analytics and SAS BI a good subject?&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/01/sas-bi-google-analytics-for-popular-topics/&quot; title=&quot;Permanent link to SAS BI: Looking at Google Analytics for Popular Blog Topics&quot;&gt;SAS BI: Looking at Google Analytics for Popular Blog Topics&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/02/crash-the-party-at-all-analytics/&quot; title=&quot;Permanent link to Crash the Party at All Analytics &amp;#8230;&quot;&gt;Crash the Party at All Analytics &amp;#8230;&lt;/a&gt;  &lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 14 May 2012 12:19:16 +0000</pubDate>
</item>
<item>
	<title>SAS and R: Example 9.31: Exploring multiple testing procedures</title>
	<guid>tag:blogger.com,1999:blog-1275149608391671670.post-9035056830709752060</guid>
	<link>http://feedproxy.google.com/~r/SASandR/~3/oBF-Ipn97X0/example-931-exploring-multiple-testing.html</link>
	<description>In &lt;a href=&quot;http://sas-and-r.blogspot.com/2012/05/example-930-addressing-multiple.html&quot;&gt;example 9.30&lt;/a&gt; we explored the effects of adjusting for multiple testing using the Bonferroni and Benjamini-Hochberg (or false discovery rate, FDR) procedures.  At the time we claimed that it would probably be inappropriate to extract the adjusted p-values from the FDR method from their context.  In this entry we attempt to explain our misgivings about this practice.&lt;br /&gt;&lt;br /&gt;The FDR procedure is described in &lt;a href=&quot;http://www.math.tau.ac.il/~ybenja/MyPapers/benjamini_hochberg1995.pdf&quot;&gt;Benjamini and Hochberg&lt;/a&gt; (JRSSB, 1995) as a &quot;step-down&quot; procedure.  Put simply, the procedure has the following steps:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;0. Choose the familywise alpha&lt;br /&gt;1. Rank order the unadjusted p-values&lt;br /&gt;2. Beginning with the Mth of the ordered p-values p(m), &lt;br /&gt;2a.    if p(m)  alpha*(m/M), then reject all tests 1 ... m, &lt;br /&gt;2b.    if not, m = m-1&lt;br /&gt;3. Repeat steps 2a and 2b until the condition is met &lt;br /&gt;               or p(1) &gt; alpha/M&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;where M is the number of tests.  The &quot;adjusted p-value&quot; based on this procedure is the smallest familywise alpha under which the current test would have been rejected.  To calculate this, we can modify the routine above:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1. Rank order the unadjusted p-values&lt;br /&gt;2. For ordered p-values p(m) M to 1, &lt;br /&gt;2a.    candidate ap(m) = p(m) *(M/m) &lt;br /&gt;2b.    if candidate ap(m) &gt; ap(m+1) then ap(m) = ap(m+1)&lt;br /&gt;2c.    else ap(m) = candidate ap(m)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;where ap(m) refers to the adjusted p-value corresponding to the mth ordered unadjusted p-value.  It's interesting to note that the adjusted p-value for the Mth ordered test is the same as the unadjusted p-value, while the candidate adjusted p-value for the smallest test is the Bonferroni adjusted p-value.  The primary difficulty with taking these p-values (as opposed to the test results) out of context is captured in steps 2b and 2c.  They imply that the p-value for a given test may be &lt;i&gt;lowered&lt;/i&gt; by other observed p-values in the family of tests.  It's also true that the adjusted p-value depends on the number of tests included in the family, but this seems somewhat less troubling.&lt;br /&gt;&lt;br /&gt;To examine the impact of the procedure on the adjusted p-values for the individual tests, we'll compare the candidate ap(m) from step 2a against the actual ap(m).  Our sense is that to the degree these are different, the adjusted p-value should not be extracted from the context of the observed family of tests.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SAS&lt;/b&gt;&lt;br /&gt;Our SAS code relies heavily on the &lt;tt&gt;array&lt;/tt&gt; statement (section 1.11.5).  We loop through the p-values from largest to smallest, calculating the candidate fdr p-value as above, before arriving at the final adjusted p-value.  To compare the values conveniently, we make a new data set with two copies of the original data set, renaming first the candidate and then the adjusted p-values to have the same names.  The &lt;tt&gt;in =&lt;/tt&gt; data set option creates a temporary variable which identifies which data set an observation was read from; here it denotes which version of the same data set (and which set of p-values) was used.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;data fdr;&lt;br /&gt;array pvals [10] pval1 - pval10 &lt;br /&gt;     (.001 .001 .001 .001 .001 .03 .035 .04 .05 .05);&lt;br /&gt;array cfdrpvals [10] cfdr1 - cfdr10;&lt;br /&gt;array fdrpvals [10] fdr1 - fdr10;&lt;br /&gt;fdrpvals[10] = pvals[10];&lt;br /&gt;do i = 9 to 1 by -1;&lt;br /&gt;  cfdrpvals[i] = pvals[i] * 10/i;&lt;br /&gt;  if cfdrpvals[i] &gt; fdrpvals[i+1] then fdrpvals[i] = fdrpvals[i+1];&lt;br /&gt;  else fdrpvals[i] = cfdrpvals[i];&lt;br /&gt;  end;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;data compare;&lt;br /&gt;set fdr (in = cfdr rename=(cfdr1=c1 cfdr2=c2 cfdr3=c3 cfdr4=c4 &lt;br /&gt;           cfdr5=c5 cfdr6=c6 cfdr7=c7 cfdr8=c8 cfdr9=c9)) &lt;br /&gt;    fdr (in = fdr rename=(fdr1=c1 fdr2=c2 fdr3=c3 fdr4=c4 fdr5=c5 &lt;br /&gt;           fdr6=c6 fdr7=c7 fdr8=c8 fdr9=c9));&lt;br /&gt;if cfdr then adjustment = &quot;Candidate fdr&quot;;&lt;br /&gt;if fdr then adjustment = &quot;Final fdr&quot;;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc print data = compare; var adjustment c1-c9; run;&lt;br /&gt;&lt;br /&gt;adjustment       c1    c2    c3     c4    c5     c6    c7    c8    c9&lt;br /&gt;&lt;br /&gt;Candidate fdr   0.010  .005  .0033  .0025  .002  .05   .05   .05   .055&lt;br /&gt;Final fdr       0.002  .002  .0020  .0020  .002  .05   .05   .05   .050&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(We omit the last p-value because the adjustment does not affect it.) The result shows that for many of the tests in this family, a substantially smaller p-value is obtained with the final FDR p-value than the candidate.  To this degree, the FDR p-value is dependent on the observed values of the p-values in the tests in the family, and ought not to be removed from the context of these other tests.  We would recommend caution in displaying the FDR p-values in such settings, given readers' propensity to use them as if they were ordinary p-values, safely adjusted for multiple testing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;R&lt;/b&gt;&lt;br /&gt;Comparison of the R and SAS code may make SAS programmers weep.  The candidate values are easily calculated, and can be presented with the final p-values in one step using the &lt;tt&gt;p.adjust()&lt;/tt&gt; function.  Three lines of code, albeit incorporating multiple functions in each line.  (And it could sensibly be done in two, calculating the candidate p-values within the &lt;tt&gt;rbind()&lt;/tt&gt; function call.)   Note especially the line calculating the candidate p-values, in which vectorization allows a for loop to be avoided in a very natural fashion.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;fakeps = c(rep(.2, 5), 6, 7, 8, 10, 10)/200&lt;br /&gt;cfdr = fakeps * 10/(1:10)&lt;br /&gt;rbind(cfdr, fdr=p.adjust(fakeps, &quot;fdr&quot;))[,1:9]&lt;br /&gt;&lt;br /&gt;      [,1]  [,2]   [,3]   [,4]  [,5] [,6] [,7] [,8]   [,9] [,10]&lt;br /&gt;cfdr 0.010 0.005 0.0033 0.0025 0.002 0.05 0.05 0.05 0.0556  0.05&lt;br /&gt;fdr  0.002 0.002 0.0020 0.0020 0.002 0.05 0.05 0.05 0.0500  0.05&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An unrelated note about aggregators&lt;/b&gt;We love aggregators!  Aggregators collect blogs that have similar coverage for the convenience of readers, and for blog authors they offer a way to reach new audiences.  &lt;a href=&quot;http://sas-and-r.blogspot.com/&quot;&gt;SAS and R&lt;/a&gt; is aggregated by &lt;a href=&quot;http://www.r-bloggers.com/&quot;&gt;R-bloggers&lt;/a&gt; and &lt;a href=&quot;http://proc-x.com/&quot;&gt;PROC-X&lt;/a&gt; with our permission, and by at least 2 other aggregating services which have never contacted us.  If you read this on an aggregator that does not credit the blogs it incorporates, please come visit us at &lt;a href=&quot;http://sas-and-r.blogspot.com/&quot;&gt;SAS and R&lt;/a&gt;.  We answer comments there and offer direct subscriptions if you like our content.  In addition, no one is allowed to profit by this work under our &lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/&quot;&gt;license&lt;/a&gt;; if you see advertisements on this page, the aggregator is violating the terms by which we publish our work.&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/1275149608391671670-9035056830709752060?l=sas-and-r.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=oBF-Ipn97X0:Z4MI6rmBkJQ:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=oBF-Ipn97X0:Z4MI6rmBkJQ:J3aVl1i_38o&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=J3aVl1i_38o&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=oBF-Ipn97X0:Z4MI6rmBkJQ:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=oBF-Ipn97X0:Z4MI6rmBkJQ:63t7Ie-LG7Y&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=63t7Ie-LG7Y&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=oBF-Ipn97X0:Z4MI6rmBkJQ:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?i=oBF-Ipn97X0:Z4MI6rmBkJQ:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=oBF-Ipn97X0:Z4MI6rmBkJQ:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?i=oBF-Ipn97X0:Z4MI6rmBkJQ:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SASandR/~4/oBF-Ipn97X0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 14 May 2012 13:00:35 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: How to read data set variables into SAS/IML vectors</title>
	<guid>http://blogs.sas.com/content/iml/?p=5304</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/wIEaGFwjxuY/</link>
	<description>&lt;p&gt;
One of the first skills that a beginning SAS/IML programmer learns is how to read data from a SAS data set into SAS/IML vectors. (Alternatively, you can &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/01/16/reading-all-variables-into-a-matrix/&quot;&gt;read data into a matrix&lt;/a&gt;). The beginner is sometimes confused about the syntax of the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect247.htm&quot;&gt;READ statement&lt;/a&gt;: do you specify the names of the variable in the data set, or the names of the SAS/IML vectors that you are trying to create? 
&lt;/p&gt;
&lt;p&gt;
The answer is &quot;yes.&quot; 
&lt;font&gt;&amp;#074;&lt;/font&gt; 
By default, SAS/IML creates vectors that have the &lt;em&gt;same name&lt;/em&gt; as the data set variables that you specify on the READ statement. For example, if you want to read variables from the Sashelp.Class data set, use the VAR clause on the READ statement to specify the variable names, like so:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;proc iml;
use Sashelp.Class;
read all var {sex height weight};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;p&gt;
This code snippet creates three vectors (&lt;tt&gt;Sex&lt;/tt&gt;, &lt;tt&gt;Height&lt;/tt&gt;, and &lt;tt&gt;Weight&lt;/tt&gt;) that each contain 19 rows, which is the number of observations in the data set. However, the question that I've been asked is &quot;What exactly is that thingy between the curly braces?&quot; Is it a list of vector names?  Is it something else?
&lt;/p&gt;
&lt;h3&gt;How the SAS/IML language treats character arrays&lt;/h3&gt;
&lt;p&gt;
The answer is &quot;It is a character vector that specifies the names of variables in the data set.&quot; The confusion arises because the &quot;thingy between curly braces&quot; doesn't have any quotation marks.  However, in the SAS/IML language, characters inside of curly braces are transformed to upper-case strings. In other words, the following two statements are equivalent:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;c = {sex height weight};    /* converted to upper case strings */
c = {&amp;quot;SEX&amp;quot; &amp;quot;HEIGHT&amp;quot; &amp;quot;WEIGHT&amp;quot;};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;p&gt;
The first statement does not contain quotation marks, but the parser recognizes that it is an array of  character values. Therefore, each character string is converted to upper case before it is stored in the vector &lt;tt&gt;c&lt;/tt&gt;. 
&lt;/p&gt;
&lt;h3&gt;Specifying variable names&lt;/h3&gt;
&lt;p&gt;
Because SAS variables are not case-sensitive, SAS software doesn't care how you specify the names of data set variables. Upper case, lower case, mixed case,...it's all the same to SAS. Consequently, the original SAS/IML statements are equivalent to the following statements:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;read all var {&amp;quot;SEX&amp;quot; &amp;quot;Height&amp;quot; &amp;quot;WeIgT&amp;quot;}; /* names are not case sensitive */&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;p&gt;
In either case, the READ statement creates three vectors that have the same names as specified on the VAR clause.
&lt;/p&gt;&lt;p&gt;
Since all specifications read the same variables, you might wonder what label appears when the PRINT statement is used to display a vector. Upper case? Mixed case?  The answer is that the PRINT statement uses the same case as the name of the variable in the data set. For this example, the variables in the Sashelp.Class data are mixed case with a leading upper-case letter, as shown in the output of the following PRINT statement:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;print sex height weight; /* print in same case as in data set */&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_readvar.png&quot; alt=&quot;&quot; width=&quot;150&quot; height=&quot;143&quot; class=&quot;alignnone size-full wp-image-5314&quot; /&gt;
&lt;p&gt;
For more details on how to read data into SAS/IML variables, see my article &quot;&lt;a href=&quot;http://blogs.sas.com/content/iml/2010/10/04/reading-sas-data-sets/&quot; title=&quot;How to read data into SAS/IML vectors and matrices&quot;&gt;Reading SAS data sets&lt;/a&gt;.&quot;
&lt;/p&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/getting-started/&quot;&gt;Getting Started&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/reading-and-writing-data/&quot;&gt;Reading and Writing Data&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=wIEaGFwjxuY:POmctGx5xAM:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=wIEaGFwjxuY:POmctGx5xAM:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=wIEaGFwjxuY:POmctGx5xAM:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=wIEaGFwjxuY:POmctGx5xAM:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/wIEaGFwjxuY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 14 May 2012 09:26:29 +0000</pubDate>
</item>
<item>
	<title>AnnMaria's Blog: Getting only numbers, in SAS and Javascript</title>
	<guid>http://www.thejuliagroup.com/blog/?p=2407</guid>
	<link>http://www.thejuliagroup.com/blog/?p=2407</link>
	<description>&lt;p&gt;The advantage of learning a new language is it sometimes makes you re-think the old languages you know. For example, here is a problem that happens often:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some people are morons.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example, say I were to ask you the following question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;How old are you?&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;YOU would probably answer something like, 42 or 21. You didn&amp;#8217;t mistake that for an essay question, now, did you? That, my dear reader, is because YOU are not a moron. However, trust me when I tell you that other people are not as smart as you.&lt;/p&gt;
&lt;p&gt;A rather annoying percentage of people enter responses along the lines of:&lt;/p&gt;
&lt;p&gt;I am 47 years old.&lt;/p&gt;
&lt;p&gt;I just turned 21. Happy Birthday to me.&lt;/p&gt;
&lt;p&gt;36 years&lt;/p&gt;
&lt;p&gt;87 (yes, eighty-seven)&lt;/p&gt;
&lt;p&gt;54 yrs.&lt;/p&gt;
&lt;p&gt;and so on &amp;#8230;.&lt;/p&gt;
&lt;p&gt;Just using the sub-string function to read in the first two characters won&amp;#8217;t work, obviously.&lt;/p&gt;
&lt;p&gt;Well, I was doing something in javascript where I asked the person their age and then stripped off everything but numbers before I tried to use the age they had given me, like so:&lt;br /&gt;
&lt;strong&gt;var age = prompt(&amp;#8220;How old are you?&amp;#8221;) ;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt; var ageyears = age.replace(/[\D]/g, &amp;#8221;);&lt;/strong&gt;&lt;br /&gt;
Usually, in my SAS programs, I would either just define age as a numeric variable and all of those who included text had their values set to missing. Or, if I wanted to minimize missing data, I would write a statement  to just read in the first two characters, or maybe to strip out &amp;#8220;years&amp;#8221; and &amp;#8220;yrs&amp;#8221;. However, in the latest data set I have, it seems to be a sample of people who are creatively annoying, so I had to settle for a lot of missing data or do something else. I got to thinking that there MUST be some function in SAS that does something similar.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;Well, wouldn&amp;#8217;t you know &amp;#8230;.&lt;/p&gt;
&lt;div&gt;You may be familiar with the COMPRESS function, which is most commonly used for removing trailing blanks. The COMPRESS function can be used to remove any characters from a variable, but it turns out that you can also use it to keep characters, as so:&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;br /&gt;
&lt;strong&gt;Age_numonly = compress(age,'0123456789','K');&lt;/strong&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;Having the &amp;#8216;K&amp;#8217; at the end reverses what the COMPRESS function normally does and instead of deleting your numbers it keeps them. I don&amp;#8217;t know how I did not know this. Maybe I knew it at one point and forgot it? Be sure you have the &amp;#8216;K&amp;#8217; in quotes, by the way.&lt;/p&gt;
&lt;p&gt;Well, now I have it stored in my blog, which is better than having it in memory, because unlike my memory, this blog gets backed up regularly.&lt;/p&gt;</description>
	<pubDate>Mon, 14 May 2012 07:54:59 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: SAS author's tip: the Student t-distribution</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2736</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/0nQawRH3Xeo/</link>
	<description>Remarkably, this week's tip was initially inspired by the Guinness Brewery in Dublin, Ireland. In his new book Statistical Analysis for Business Using JMP, Professor Willbann Terpening provides lots of useful information - including the origin and usage of the Student t-distribution. If you'd like to get to know Willbann and [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=0nQawRH3Xeo:ZQvv-O0rRuY:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=0nQawRH3Xeo:ZQvv-O0rRuY:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/0nQawRH3Xeo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 11 May 2012 15:56:05 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: Friday's Innovation Inspiration - High schoolers analyzing high schoolers</title>
	<guid>http://blogs.sas.com/content/sgf/?p=2897</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/E9Fz7Kst5k0/</link>
	<description>&lt;p&gt;Part of what captivated me about this paper and poster presentation were the presenters - these guys are high school kids using SAS to do a visual analysis of Internet use by high schoolers. The idea was so compelling that Anna Brown and Inside SAS Global Forum went to talk to two of the presenters to learn what they researched and why they started the project.&lt;/p&gt;
&lt;p&gt;
&lt;!-- powered by Iframe plugin ver.2.1 (wordpress.org/extend/plugins/iframe/) --&gt;
 &lt;/p&gt;
&lt;div&gt;Watch &lt;a title=&quot;live&quot; href=&quot;http://www.livestream.com/?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;live streaming video&lt;/a&gt; from &lt;a title=&quot;Watch&quot; href=&quot;http://www.livestream.com/sasglobalforum2012?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;sasglobalforum2012&lt;/a&gt; at livestream.com&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Aren't these guys fascinating?! They are definitely going to be competing for one of the &lt;a title=&quot;Inside SAS Global Forum interview with George Hurley&quot; href=&quot;http://blogs.sas.com/content/sgf/2012/05/01/statistician-the-sexy-job-of-the-next-decade&quot; target=&quot;_blank&quot;&gt;sexy statistician jobs &lt;/a&gt;of the future! How can you use their inspiration in your research?&lt;/p&gt;
&lt;p&gt;Here's a link to their paper, &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/197-2012.pdf&quot; target=&quot;_blank&quot;&gt;&quot;A Week in the Life”: A Visual Analysis of Internet Use by School-Age Students&lt;/a&gt;.
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/fridays-innovation-inspiration/&quot;&gt;Friday's Innovation Inspiration&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/inside-sas-global-forum/&quot;&gt;Inside SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/internet/&quot;&gt;Internet&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/papers-presentations/&quot;&gt;papers &amp;amp; presentations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/social-media/&quot;&gt;social media&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/stem/&quot;&gt;STEM&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/student-scholarship-programs/&quot;&gt;student scholarship programs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=E9Fz7Kst5k0:mLgHIXmW6S4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=E9Fz7Kst5k0:mLgHIXmW6S4:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=E9Fz7Kst5k0:mLgHIXmW6S4:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=E9Fz7Kst5k0:mLgHIXmW6S4:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/E9Fz7Kst5k0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 11 May 2012 13:00:52 +0000</pubDate>
</item>
<item>
	<title>SAS Analysis: Transform a SAS data set to an Excel pivot table by VBA</title>
	<guid>tag:blogger.com,1999:blog-3256159328630041416.post-3416200398584197968</guid>
	<link>http://feedproxy.google.com/~r/SasAnalysis/~3/plZNc1IzmbY/transform-sas-data-set-to-excel-pivot.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-AYXdRz94wnk/T6wtgH_ktvI/AAAAAAAABFo/x6o5lwQkUdM/s1600/2012-05-08_100252.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;355&quot; src=&quot;http://3.bp.blogspot.com/-AYXdRz94wnk/T6wtgH_ktvI/AAAAAAAABFo/x6o5lwQkUdM/s400/2012-05-08_100252.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Pivot Table in Excel is the popular data report format, which is similar to an OLAP cube that aggregates data at any dimensions. To create a pivot table for a table with lots of columns, it usually takes 100+ drags and clicks to get job done, which is somehow annoying. &lt;br /&gt;
&lt;br /&gt;
I didn't try the SAS’s Add-in for Microsoft Office or SAS Enterprise Guide yet. However, an easy solution to transform a SAS data set toward an Excel pivot table is possibly to use some VBA scripts under Excel. For example, SASHELP.PRDSAL2, which is a free data set shipped with SAS, records the furniture sales in 64 states of the three countries from 1995 to 1998, and has total 23,040 observations and 11 variables. This data set can be transformed to an Excel pivot table very quickly by two simple steps.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 1&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/--vNJ_mPcWLA/T6wvNClRsuI/AAAAAAAABFw/ADXpEB8Wxxk/s1600/111111111111111.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;273&quot; src=&quot;http://3.bp.blogspot.com/--vNJ_mPcWLA/T6wvNClRsuI/AAAAAAAABFw/ADXpEB8Wxxk/s400/111111111111111.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
In SAS, a data set can be exported toward an XLS file through ODS destination. Although it is still based on HTLM format, it can be opened by Excel.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;ods html file = 'c:\tmp\prdsal2.xls' style = minimal;
title;
proc print data = sashelp.prdsal2 noobs;
run;
ods html close;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Step 2&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-O0yRpySVb3w/T6wvTJfqLmI/AAAAAAAABF4/2VYS-yqrJKg/s1600/22222222222.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;273&quot; src=&quot;http://4.bp.blogspot.com/-O0yRpySVb3w/T6wvTJfqLmI/AAAAAAAABF4/2VYS-yqrJKg/s400/22222222222.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Next step we click on this file, press ALT + F11 to enter VBA editor, paste the VBA code below and run it. Then the pivot table is created. The good thing about this method is that the pivot table can be replicated anywhere by such a VBA subroutine, and it is customizable for particular needs. The example was finished in Excel 2007.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
Sub createPT()
'   Set storage path for the pivot table 
    myDataset = &quot;sashelp.prdsal2&quot;
    myFilepath = &quot;c:\tmp\&quot; &amp;amp; myDataset &amp;amp; &quot;_&quot; &amp;amp; Format(Date, &quot;dd-mm-yyyy&quot;) &amp;amp; &quot;.xlsx&quot;
    Dim myPTCache As PivotCache
    Dim myPT As PivotTable

'   Delete the sheet containing the previous pivot table   
    Application.ScreenUpdating = False
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets(&quot;Pivot_Table_Sheet&quot;).Delete
    On Error GoTo 0
    
'   Create the cache
    Set myPTCache = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, SourceData:=Range(&quot;A1&quot;).CurrentRegion)
    
'   Add a new sheet for the pivot table
    Worksheets.Add
    ActiveSheet.Name = &quot;Pivot_Table_Sheet&quot;
    
'   Create the pivot table
    Set myPT = ActiveSheet.PivotTables.Add( _
        PivotCache:=myPTCache, TableDestination:=Range(&quot;A5&quot;))
    With myPT
        .PivotFields(&quot;COUNTRY&quot;).Orientation = xlPageField
        .PivotFields(&quot;STATE&quot;).Orientation = xlRowField
        .PivotFields(&quot;PRODTYPE&quot;).Orientation = xlRowField
        .PivotFields(&quot;PRODUCT&quot;).Orientation = xlRowField
        .PivotFields(&quot;YEAR&quot;).Orientation = xlColumnField
        .PivotFields(&quot;QUARTER&quot;).Orientation = xlColumnField
        .PivotFields(&quot;MONTH&quot;).Orientation = xlColumnField
        .PivotFields(&quot;ACTUAL&quot;).Orientation = xlDataField
        .PivotFields(&quot;PREDICT&quot;).Orientation = xlDataField
        .DataPivotField.Orientation = xlRowField
        '  Add a calculated field to compare the predicted value and the actual value
        .CalculatedFields.Add &quot;DIFF&quot;, &quot;=PREDICT-ACTUAL&quot;
        .PivotFields(&quot;DIFF&quot;).Orientation = xlDataField
        ' Specify a number format
        .DataBodyRange.NumberFormat = &quot;$#, ##0.00&quot;
        ' Apply a style for pivot table
        .TableStyle2 = &quot;PivotStyleLight18&quot;
    End With
    Range(&quot;A1&quot;).FormulaR1C1 = &quot;Pivot table made from data set&quot; &amp;amp; &quot; &quot; &amp;amp; myDataset
    Range(&quot;A2&quot;).FormulaR1C1 = &quot;Prepared by WWW.SASANALYSIS.COM on &quot; &amp;amp; Date
    ActiveWorkbook.SaveAs Filename:=myFilepath, _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3256159328630041416-3416200398584197968?l=www.sasanalysis.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasAnalysis/~4/plZNc1IzmbY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 11 May 2012 10:45:45 +0000</pubDate>
</item>
<item>
	<title>Koopmann: windows environment variables</title>
	<guid>http://koopmann.us/post/2012/5/10/windows-environment-variables.html</guid>
	<link>http://koopmann.us/post/2012/5/10/windows-environment-variables.html</link>
	<description>&lt;p&gt;wherein i came accross some code for reading in windows environment variables.&lt;/p&gt;</description>
	<pubDate>Thu, 10 May 2012 19:00:06 +0000</pubDate>
</item>
<item>
	<title>The SAS Training Post: Jedi SAS Tricks:  FUNC(y) Formats</title>
	<guid>http://blogs.sas.com/content/sastraining/?p=2513</guid>
	<link>http://feedproxy.google.com/~r/TheSasTrainingPost/~3/moF00_FaBsA/</link>
	<description>In the previous episode, we built our own custom SAS function - a masterful trick indeed. Gordon Keener, a developer here at SAS, responded exuberantly &quot;You think that's cool? - try THIS!&quot; and proceeded to demonstrate prodigious powers with the SAS by using a custom function in a custom informat [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=moF00_FaBsA:gbrU3g2jNHY:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=moF00_FaBsA:gbrU3g2jNHY:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheSasTrainingPost/~4/moF00_FaBsA&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 10 May 2012 17:44:25 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: SESUG student grants: Apply now</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3054</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/PqTTxFo9ilE/</link>
	<description>&lt;p&gt;The semester is coming to an end and summer break is just around the corner, so why should you be thinking about conferences and grant opportunities?  Conferences like SESUG provide a lot of great benefits to students.&lt;span id=&quot;more-3054&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;SAS users groups conferences are a great source of professional development. They offer workshops and presentations for those with advanced skills as well as those new to SAS who are interested in learning more. They are also a great place to hone your skills as a presenter.  This is a place students can showcase their work and abilities in front of a large number of potential employers. There will be numerous networking and social events and many of these participants are hiring managers who are interested in meeting recent and upcoming graduates who have the knowledge and skills they are looking for.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://sesug.org/SESUG2012/&quot; target=&quot;_blank&quot;&gt;SESUG conference&lt;/a&gt; will be held at the Sheraton Imperial Hotel and Convention Center in Durham, North Carolina, October 14-16.  The &lt;a href=&quot;http://sesug.org/SESUG2012/StudentGrants.php&quot; target=&quot;_blank&quot;&gt;SESUG Student Grant application&lt;/a&gt; process is open now.  There are two levels of support, one of which includes a travel stipend.  This is a great way to build out your resume and network with professionals from a variety of industries.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;A message from Deborah Skinner, SESUG Student Grant Coordinator&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Students selected for the grant program receive the VIP treatment at our conference.  Grant winners are recognized at the opening session and are guests at a special student luncheon, as well as having special ribbons on their conference badges.  In addition, there are meals and mixers for all of the attendees – so there are plenty of opportunities to mingle and meet.    Previous student grant winners have consistently told us what a wonderful time they had at the conference and what an eye-opening experience it was for them in planning for their future.&lt;/p&gt;
&lt;p&gt;I can promise you that you will walk away from SESUG 2012 with new knowledge about SAS, new insights into your future, and lots of new friends and colleagues.    You will have lots of opportunities to learn, grow, and frankly just have a lot of fun.   So what are you waiting for?  The SESUG website contains all of the details and a link to the application.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sesug.org/SESUG2012/StudentGrants.php&quot; target=&quot;_blank&quot;&gt;Learn more and apply now!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NOTE:Originally published on &lt;a title=&quot;Generation SAS blog&quot; href=&quot;http://blogs.sas.com/content/academic/2012/05/04/sesug-is-offering-student-grants-to-attend-the-conference-its-time-to-get-your-application-in/&quot; target=&quot;_blank&quot;&gt;Generation SAS&lt;/a&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sesug/&quot;&gt;SESUG&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/student-scholarship-programs/&quot;&gt;student scholarship programs&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/us-regional-conferences/&quot;&gt;US Regional Conferences&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=PqTTxFo9ilE:01VJIz1OPMw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=PqTTxFo9ilE:01VJIz1OPMw:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=PqTTxFo9ilE:01VJIz1OPMw:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=PqTTxFo9ilE:01VJIz1OPMw:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/PqTTxFo9ilE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 10 May 2012 16:55:46 +0000</pubDate>
</item>
<item>
	<title>BI Notes: SAS Enterprise Guide: Import the Excel Spreadsheet – Easy Peasy</title>
	<guid>http://www.bi-notes.com/?p=3235</guid>
	<link>http://www.bi-notes.com/2012/05/sas-enterprise-guide-import-excel/</link>
	<description>&lt;p&gt;One SAS Enterprise Guide feature I particularly like is the ability to import Microsoft Excel data quickly and easily.  SAS offers many ways to work with Excel spreadsheets but often I find I just want to extract data from Excel and get on with my job.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt; &amp;#8211; Click on any picture to see a larger image!&lt;/p&gt;
&lt;h2&gt;Use a &amp;#8220;Known Good&amp;#8221; First Time&lt;/h2&gt;
&lt;p&gt;If you are trying this process for the first time, use a &amp;#8220;known good&amp;#8221; or simple spreadsheet so if any issues arise you can at least eliminate the data as the cause. When this process fails, I generally find that the spreadsheet has something odd going on, such as pasted text, etc.  SAS Enterprise Guide has some sample spreadsheets available, which I use in this example.&lt;/p&gt;
&lt;p&gt;The SupplyInfo.xls spreadsheet is available in the SAS Enterprise Guide Sample data sub-directory. It has two sheets: Suppliers and Shippers.  Let&amp;#8217;s import the Suppliers spreadsheet for some quick analysis. Here is the location of my sample files.  [Read &lt;a title=&quot;Create Your Own Sample Data for SAS BI&quot; href=&quot;http://www.bi-notes.com/2011/10/create-your-own-sample-data/&quot;&gt;Create Your Own Sample Data for SAS BI&lt;/a&gt; for ideas about where other sample data lives.]&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_01.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3242&quot; title=&quot;sas enterprise guide sample spreadsheets&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_01.jpg&quot; alt=&quot;import excel into EG 01 SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;505&quot; height=&quot;254&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Import Your Excel Spreadsheet&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;m using SAS Enterprise Guide 5.1; as far as I can tell the wizard has not changed much from earlier releases so you should be able to follow along.&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;5&quot; align=&quot;left&quot;&gt;
&lt;tbody&gt;
&lt;tr align=&quot;left&quot; valign=&quot;top&quot;&gt;
&lt;td&gt;
&lt;p&gt;1 &amp;#8211; From SAS Enterprise Guide, select &lt;strong&gt;File &amp;gt; Import Data&lt;/strong&gt;.  &lt;/p&gt;
&lt;p&gt;2 &amp;#8211; In the Open window, navigate to the where the spreadsheet is stored and select it. The Import Data Wizard appears.&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_03.jpg&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-3240&quot; title=&quot;import_excel_into_EG_03&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_03.jpg&quot; alt=&quot;import excel into EG 03 SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;604&quot; height=&quot;343&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr align=&quot;left&quot; valign=&quot;top&quot;&gt;
&lt;td&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04a.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3237&quot; title=&quot;Import Excel Into EG Step 1&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04a.jpg&quot; alt=&quot;import excel into EG 04a SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;602&quot; height=&quot;433&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;3 &amp;#8211; SAS populates the Specify Data window with the source spreadsheet and suggests loading the spreadsheet into the WORK library. Click Next to continue.&lt;/p&gt;
&lt;p&gt;Use the Browse button if you want to make changes.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr align=&quot;left&quot; valign=&quot;top&quot;&gt;
&lt;td&gt;
&lt;p&gt;4 &amp;#8211; In the Select Data Source window, select the sheet you want to import.  &lt;/p&gt;
&lt;p&gt;For this example, you are importing the entire spreadsheet so you only need to select the spreadsheet name.  The first row has the column names.  &lt;/p&gt;
&lt;p&gt;You might want to experiment later with just importing certain row and columns to see how SAS handles it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04b.jpg&quot;&gt;&lt;img class=&quot;size-full wp-image-3238 alignleft&quot; title=&quot;import_excel_into_EG_04b&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04b.jpg&quot; alt=&quot;import excel into EG 04b SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;589&quot; height=&quot;444&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr align=&quot;left&quot; valign=&quot;top&quot;&gt;
&lt;td&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04c.jpg&quot;&gt;&lt;img class=&quot;wp-image-3239 alignleft&quot; title=&quot;import_excel_into_EG_04c&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04c.jpg&quot; alt=&quot;import excel into EG 04c SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;573&quot; height=&quot;467&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;5. In the Define Field Attributes window, you can make decisions about the individual data items.  For instance, you may want a field brought in as character (string) instead of a number.&lt;/p&gt;
&lt;p&gt;The SupplierID data item is all numbers so SAS guessed it was Number.  This is a common instance where you might prefer this value to be treated as a character.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr align=&quot;left&quot; valign=&quot;top&quot;&gt;
&lt;td&gt; 6 &amp;#8211; The last window allows you a few choices to change before the import.&lt;/td&gt;
&lt;td&gt; &lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04d.jpg&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-3236&quot; title=&quot;import_excel_into_EG_04d&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_04d.jpg&quot; alt=&quot;import excel into EG 04d SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;602&quot; height=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Viewing the Results&lt;/h2&gt;
&lt;p&gt;After the import completes you will have a fresh dataset to use for analysis.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_02_after.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3241&quot; title=&quot;import_excel_into_EG_02_after&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_02_after.jpg&quot; alt=&quot;import excel into EG 02 after SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;867&quot; height=&quot;481&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Modifying the Import&lt;/h2&gt;
&lt;p&gt;If you don&amp;#8217;t like how the data appears, you can ticker with the results.  The Modify Task button re-starts the Data Import wizard.  You can also right-click the Import Data icon to make changes.&lt;/p&gt;
&lt;p&gt; If you later add more rows to the spreadsheet, just Run the Process Flow again.  You can re-import the spreadsheet a thousand times if you want to spend your day doing that. &lt;img src=&quot;http://www.bi-notes.com/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;icon wink SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; class=&quot;wp-smiley&quot; title=&quot;SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_5.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3249&quot; title=&quot;import_excel_into_EG_5&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/import_excel_into_EG_5.jpg&quot; alt=&quot;import excel into EG 5 SAS Enterprise Guide: Import the Excel Spreadsheet   Easy Peasy&quot; width=&quot;785&quot; height=&quot;487&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 10 May 2012 16:18:34 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Going the wrong way down a one-way street</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2717</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/XeD7wUXIQMA/</link>
	<description>Have you ever turned the wrong way onto a one-way street? I was driving in downtown Raleigh last weekend and did just that. How embarrassing. Based on my driving directions, I knew there was a one-way street ahead. Truthfully, I was talking and laughing with my sister and wasn’t paying [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=XeD7wUXIQMA:qzNSUxZ_J98:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=XeD7wUXIQMA:qzNSUxZ_J98:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/XeD7wUXIQMA&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 10 May 2012 15:14:37 +0000</pubDate>
</item>
<item>
	<title>The SAS Training Post: #1 SAS programming tip for 2012</title>
	<guid>http://blogs.sas.com/content/sastraining/?p=2485</guid>
	<link>http://feedproxy.google.com/~r/TheSasTrainingPost/~3/z4mdaxNsjWc/</link>
	<description>What tiny looking operator packs a mighty punch with large datasets?  Your queries are big. Your reports span multiple columns. To top it all you have to summarize data in multiple ways. Are you tempted to throw in the towel? Do you feel like saying a firm “Can’t be done” [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=z4mdaxNsjWc:iGTWR2Y4F1E:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=z4mdaxNsjWc:iGTWR2Y4F1E:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheSasTrainingPost/~4/z4mdaxNsjWc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 10 May 2012 15:03:17 +0000</pubDate>
</item>
<item>
	<title>Key Happenings at support.sas.com: Get the syntax right</title>
	<guid>http://blogs.sas.com/content/supportnews/?p=323</guid>
	<link>http://feedproxy.google.com/~r/UpdatesInSasOnlineSupport/~3/OJ0o4avazvg/</link>
	<description>With your fingers poised over the keyboard and staring lovingly into the program editor, your mind goes blank. Panic sets in. Oh no.  What's the name of the statement I need ?  Oh right. The ODS Select statement. Maybe. Lots and lots of SAS users write SAS programs every day, so [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=OJ0o4avazvg:EGbE7indGAY:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=OJ0o4avazvg:EGbE7indGAY:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=OJ0o4avazvg:EGbE7indGAY:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?i=OJ0o4avazvg:EGbE7indGAY:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=OJ0o4avazvg:EGbE7indGAY:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?i=OJ0o4avazvg:EGbE7indGAY:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?a=OJ0o4avazvg:EGbE7indGAY:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/UpdatesInSasOnlineSupport?i=OJ0o4avazvg:EGbE7indGAY:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/UpdatesInSasOnlineSupport/~4/OJ0o4avazvg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 10 May 2012 12:50:11 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Finding each other through social media</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2703</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/KBn2sS4fuTk/</link>
	<description>Would you like to get to know others who share a common interest in SAS books and documentation? We’ve made it easy for you. Besides reading this blog, here are 3 places to discuss our publications and get real-time announcements. Fans of SAS Books on LinkedIn SAS Publishing on Twitter SAS Publishing’s Facebook [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=KBn2sS4fuTk:7qqGU8RM9zE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=KBn2sS4fuTk:7qqGU8RM9zE:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/KBn2sS4fuTk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 09 May 2012 18:24:41 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: Using Windows PowerShell to view your SAS data dictionary</title>
	<guid>http://blogs.sas.com/content/sasdummy/?p=2122</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/dOSglwVacdg/</link>
	<description>&lt;p&gt;In a &lt;a title=&quot;last month&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/12/build-your-own-sas-data-set-viewer-using-powershell/&quot;&gt;previous post&lt;/a&gt; I showed how you can use &lt;a title=&quot;cool stuff, really&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/12/build-your-own-sas-data-set-viewer-using-powershell/&quot;&gt;Windows PowerShell (with the SAS Local Data Provider) to create a SAS data set viewer&lt;/a&gt;.  This approach doesn't require that you have SAS installed, and allows you to read or export the records within a SAS data set file.&lt;/p&gt;
&lt;p&gt;In this post, I'll present two companion scripts that allow you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gather the table-level metadata about a SAS data set, including the observation count, created and last-modified dates, data set label, and more.&lt;/li&gt;
&lt;li&gt;Gather the column-level metadata within each SAS data set, including variable names, types, formats, lengths, and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you make use of the &lt;a title=&quot;Example of reporting using SAS DICTIONARY tables&quot; href=&quot;http://support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#n0cqcq4fhom7qtn17t7zkfdkxp4f.htm&quot;&gt;SAS DICTIONARY tables&lt;/a&gt; (as seen in &lt;a title=&quot;A list of the SASHELP views and what they show&quot; href=&quot;http://support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#n02s19q65mw08gn140bwfdh7spx7.htm&quot;&gt;SASHELP.VMEMBER and SASHELP.VCOLUMN&lt;/a&gt;), these scripts will provide familiar information.  But like my previous example, these scripts do not require a SAS installation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Why is this useful?&lt;/em&gt; Of course, the best way to read SAS data sets is to use SAS.  And if you have SAS data sets, the probability is high that you have SAS installed somewhere, so why not use it?  It turns out that even among companies that use SAS, not every employee has access to a SAS environment.  (Tragic, right?)  And since SAS data sets are often treated as a corporate asset (or, at least, the information &lt;em&gt;within&lt;/em&gt; the data sets is), these are subject to cataloging and auditing by staff who don't use SAS.  These scripts can enable a light-weight auditing process with a minimum of installation/licensing complications.&lt;/p&gt;
&lt;p&gt;Here are links to all three scripts.  To use them, save each file to your local PC as a .PS1 file.  You will also need to make sure that &lt;a title=&quot;some simple steps to verify&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2011/09/12/running-windows-powershell-scripts/&quot;&gt;you can run Windows PowerShell scripts&lt;/a&gt;, and that &lt;a href=&quot;http://support.sas.com/demosdownloads/setupcat.jsp?cat=SAS+Providers+for+OLE+DB&quot; title=&quot;download and install for free&quot;&gt;you have the SAS OLE DB Local Data Provider installed&lt;/a&gt; (free to download).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://support.sas.com/documentation/onlinedoc/guide/examples/SASGF2012/ReadSasDataset.ps1.txt&quot;&gt;ReadSasDataset.ps1&lt;/a&gt; (already discussed &lt;a title=&quot;reading sas7bdat files&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/12/build-your-own-sas-data-set-viewer-using-powershell/&quot;&gt;in this post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://support.sas.com/documentation/onlinedoc/guide/examples/SASGF2012/ReadSasDataTables.ps1.txt&quot;&gt;ReadSasDataTables.ps1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://support.sas.com/documentation/onlinedoc/guide/examples/SASGF2012/ReadSasDataColumns.ps1.txt&quot;&gt;ReadSasDataColumns.ps1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The output of each of these scripts is in the form of PowerShell objects, which are most useful when piped into another PowerShell &lt;a title=&quot;about cmdlets&quot; href=&quot;http://technet.microsoft.com/en-us/scriptcenter/dd772285&quot;&gt;cmdlet&lt;/a&gt; such as &lt;a title=&quot;more about Out-GridView and its options&quot; href=&quot;http://technet.microsoft.com/en-us/library/ff730930.aspx&quot;&gt;Out-GridView&lt;/a&gt; (for visual display) or &lt;a title=&quot;more about Export-CSV cmdlet&quot; href=&quot;http://technet.microsoft.com/en-us/library/ee176825.aspx&quot;&gt;Export-CSV&lt;/a&gt; (for use as input to Excel or another data-driven process).&lt;/p&gt;
&lt;h3&gt;Examples (as run from a PowerShell console window)&lt;/h3&gt;
&lt;p&gt;To view the table information about all SAS data sets in a file path &lt;em&gt;w:/&lt;/em&gt; (including subfolders):&lt;br /&gt;
&lt;pre&gt;
.\ReadSasDataTables.ps1 w:\ | Out-GridView
&lt;/pre&gt;&lt;br /&gt;
Result (click on the image to see the full-size version):&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/readtables_ps.png&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-2133&quot; src=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/readtables_ps-300x89.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;89&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To export the SAS table information to a CSV file:&lt;br /&gt;
&lt;pre&gt;
.\ReadSasDataTables.ps1 w:\ | Export-CSV -NoType -Path c:\report\tables.csv
&lt;/pre&gt;&lt;br /&gt;
Result:&lt;br /&gt;
&lt;pre&gt;
&amp;quot;FileName&amp;quot;,&amp;quot;Path&amp;quot;,&amp;quot;FileTime&amp;quot;,&amp;quot;FileSize&amp;quot;,&amp;quot;TableName&amp;quot;,&amp;quot;Label&amp;quot;,&amp;quot;Created&amp;quot;,&amp;quot;Modified&amp;quot;,&amp;quot;LogicalRecords&amp;quot;,&amp;quot;PhysicalRecords&amp;quot;,&amp;quot;RecordLength&amp;quot;,&amp;quot;Compressed&amp;quot;,&amp;quot;Indexed&amp;quot;,&amp;quot;Type&amp;quot;,&amp;quot;Encoding&amp;quot;,&amp;quot;WindowsCodepage&amp;quot;
&amp;quot;users.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;466944&amp;quot;,&amp;quot;users&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;412&amp;quot;,&amp;quot;412&amp;quot;,&amp;quot;952&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;,&amp;quot;bloglist&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;28&amp;quot;,&amp;quot;28&amp;quot;,&amp;quot;1360&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&amp;quot;posts.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:09 AM&amp;quot;,&amp;quot;103555072&amp;quot;,&amp;quot;posts&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/8/2012 9:37:07 AM&amp;quot;,&amp;quot;5/8/2012 9:37:07 AM&amp;quot;,&amp;quot;41077&amp;quot;,&amp;quot;41077&amp;quot;,&amp;quot;2496&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&amp;quot;postviews.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:09 AM&amp;quot;,&amp;quot;5120000&amp;quot;,&amp;quot;postviews&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/8/2012 9:37:09 AM&amp;quot;,&amp;quot;5/8/2012 9:37:09 AM&amp;quot;,&amp;quot;4808&amp;quot;,&amp;quot;4808&amp;quot;,&amp;quot;1040&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&amp;quot;comments.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:12 AM&amp;quot;,&amp;quot;26943488&amp;quot;,&amp;quot;comments&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/8/2012 9:37:11 AM&amp;quot;,&amp;quot;5/8/2012 9:37:11 AM&amp;quot;,&amp;quot;7807&amp;quot;,&amp;quot;7807&amp;quot;,&amp;quot;3432&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&amp;quot;published_posts.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:13 AM&amp;quot;,&amp;quot;11739136&amp;quot;,&amp;quot;published_posts&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/8/2012 9:37:13 AM&amp;quot;,&amp;quot;5/8/2012 9:37:13 AM&amp;quot;,&amp;quot;4628&amp;quot;,&amp;quot;4628&amp;quot;,&amp;quot;2512&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&amp;quot;blogsocial.sas7bdat&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/6/2012 1:19:06 PM&amp;quot;,&amp;quot;401408&amp;quot;,&amp;quot;blogsocial&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;5/6/2012 1:19:06 PM&amp;quot;,&amp;quot;5/6/2012 1:19:06 PM&amp;quot;,&amp;quot;682&amp;quot;,&amp;quot;682&amp;quot;,&amp;quot;544&amp;quot;,&amp;quot;NO&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;20&amp;quot;,&amp;quot;65001&amp;quot;
&lt;/pre&gt;&lt;br /&gt;
To view the columns (variables) information for all SAS data sets within a folder &lt;em&gt;w:/&lt;/em&gt; (including subfolders):&lt;br /&gt;
&lt;pre&gt;
.\ReadSasDataColumns.ps1 w:\ | Out-GridView
&lt;/pre&gt;&lt;br /&gt;
Result (click on the image to see the full-size version):&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/readcolumns_ps.png&quot;&gt;&lt;img class=&quot;alignnone size-medium wp-image-2132&quot; src=&quot;http://blogs.sas.com/content/sasdummy/files/2012/05/readcolumns_ps-300x226.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To export the SAS columns information to a CSV file:&lt;br /&gt;
&lt;pre&gt;
.\ReadSasDataColumns.ps1 w:\ | Export-CSV -NoType -Path c:\report\columns.csv
&lt;/pre&gt;&lt;br /&gt;
Result (partial):&lt;br /&gt;
&lt;pre&gt;
&amp;quot;File name&amp;quot;,&amp;quot;Column&amp;quot;,&amp;quot;Label&amp;quot;,&amp;quot;Pos&amp;quot;,&amp;quot;Type&amp;quot;,&amp;quot;Length&amp;quot;,&amp;quot;Format&amp;quot;,&amp;quot;Informat&amp;quot;,&amp;quot;Indexed&amp;quot;,&amp;quot;Path&amp;quot;,&amp;quot;File time&amp;quot;,&amp;quot;File size&amp;quot;
&amp;quot;users.sas7bdat&amp;quot;,&amp;quot;ID&amp;quot;,&amp;quot;ID&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;NUM&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;466944&amp;quot;
&amp;quot;users.sas7bdat&amp;quot;,&amp;quot;user_login&amp;quot;,&amp;quot;user_login&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;130&amp;quot;,&amp;quot;90&amp;quot;,&amp;quot;$180.&amp;quot;,&amp;quot;$180.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;466944&amp;quot;
&amp;quot;users.sas7bdat&amp;quot;,&amp;quot;user_registered&amp;quot;,&amp;quot;user_registered&amp;quot;,&amp;quot;3&amp;quot;,&amp;quot;NUM&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;DATETIME19.&amp;quot;,&amp;quot;DATETIME19.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;466944&amp;quot;
&amp;quot;users.sas7bdat&amp;quot;,&amp;quot;display_name&amp;quot;,&amp;quot;display_name&amp;quot;,&amp;quot;4&amp;quot;,&amp;quot;130&amp;quot;,&amp;quot;375&amp;quot;,&amp;quot;$750.&amp;quot;,&amp;quot;$750.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;466944&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;blog_id&amp;quot;,&amp;quot;blog_id&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;NUM&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;name&amp;quot;,&amp;quot;option_value&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;130&amp;quot;,&amp;quot;512&amp;quot;,&amp;quot;$1024.&amp;quot;,&amp;quot;$1024.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;path&amp;quot;,&amp;quot;path&amp;quot;,&amp;quot;3&amp;quot;,&amp;quot;130&amp;quot;,&amp;quot;150&amp;quot;,&amp;quot;$300.&amp;quot;,&amp;quot;$300.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;registered&amp;quot;,&amp;quot;registered&amp;quot;,&amp;quot;4&amp;quot;,&amp;quot;NUM&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;DATETIME19.&amp;quot;,&amp;quot;DATETIME19.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;last_updated&amp;quot;,&amp;quot;last_updated&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;NUM&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;DATETIME19.&amp;quot;,&amp;quot;DATETIME19.&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;
&amp;quot;bloglist.sas7bdat&amp;quot;,&amp;quot;public&amp;quot;,&amp;quot;public&amp;quot;,&amp;quot;6&amp;quot;,&amp;quot;NUM&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;False&amp;quot;,&amp;quot;w:\&amp;quot;,&amp;quot;5/8/2012 9:37:03 AM&amp;quot;,&amp;quot;73728&amp;quot;
&lt;/pre&gt;&lt;br /&gt;
 
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/data-sets/&quot;&gt;data sets&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/ole-db/&quot;&gt;ole db&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/powershell/&quot;&gt;PowerShell&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/proc-datasets/&quot;&gt;PROC DATASETS&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=dOSglwVacdg:jDIImnmdEOw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=dOSglwVacdg:jDIImnmdEOw:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=dOSglwVacdg:jDIImnmdEOw:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?i=dOSglwVacdg:jDIImnmdEOw:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=dOSglwVacdg:jDIImnmdEOw:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?i=dOSglwVacdg:jDIImnmdEOw:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/dOSglwVacdg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 09 May 2012 16:56:06 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: How the Orlando Magic relies on SAS Analytics</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3025</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/79GhUoA6g6A/</link>
	<description>&lt;p&gt;So, when you go to the game, do you buy a hot dog, a beer and a banner before the first quarter? Do you buy them all from the same vendor? Do you go back during the half? Does the score impact how much money you spend on concessions? All of these questions and more are being considered by Orlando Magic as data points in the customer experience.&lt;/p&gt;
&lt;p&gt;Watch this great Inside SAS Global Forum interview with Anna Brown and Anthony Perez, Director of Business Strategy with the Orlando Magic.&lt;span id=&quot;more-3025&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;!-- powered by Iframe plugin ver.2.1 (wordpress.org/extend/plugins/iframe/) --&gt;
 &lt;/p&gt;
&lt;div&gt;&lt;a title=&quot;Watch sasglobalforum2012&quot; href=&quot;http://www.livestream.com/sasglobalforum2012?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;sasglobalforum2012&lt;/a&gt; on livestream.com. &lt;a title=&quot;Broadcast Live Free&quot; href=&quot;http://www.livestream.com/?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;Broadcast Live Free&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Read this &lt;a title=&quot;Better, Consistent Customer Experience from Analytically Based Real-Time Decisions (SAS Global Forum 2012 paper by Toshi Tsuboi)&quot; href=&quot;http://support.sas.com/resources/papers/proceedings12/109-2012.pdf&quot; target=&quot;_blank&quot;&gt;fantastic SAS Global Forum 2012 paper about creating the customer experience&lt;/a&gt; by Toshi Tsuboi. Tsuboi writes, &quot;If you are involved in a consumer-oriented business, you probably get a sense that consumers are never satisfied....while you strive to provide them with what they want, if you mess up just once, they decide to tell everyone around the globe about it using Twitter and Facebook.&lt;/p&gt;
&lt;p&gt;This change in customer expectations was foreseen back in 1999 by B. Joseph Pine II and James H. Gilmore in a book titled &lt;em&gt;The Experience Economy&lt;/em&gt;. They described a new economy they called the experience economy, in which experience is the new currency. They argue that businesses must orchestrate memorable events for their customers, and that memory, or &quot;experience,&quot; becomes the product. If a business is more advanced in providing experiences, that business can begin charging for the value of the transformation that an experience offers.&quot;&lt;/p&gt;
&lt;p&gt;Intrigued? &lt;a title=&quot;Better, Consistent Customer Experience from Analytically Based Real-Time Decisions&quot; href=&quot;http://support.sas.com/resources/papers/proceedings12/109-2012.pdf&quot; target=&quot;_blank&quot;&gt;Read the paper&lt;/a&gt;.
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/customer-relationship-management/&quot;&gt;customer relationship management&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/inside-sas-global-forum/&quot;&gt;Inside SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/orlando-magic/&quot;&gt;Orlando Magic&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/papers-presentations/&quot;&gt;papers &amp;amp; presentations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=79GhUoA6g6A:1ISYRFKXBQg:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=79GhUoA6g6A:1ISYRFKXBQg:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=79GhUoA6g6A:1ISYRFKXBQg:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=79GhUoA6g6A:1ISYRFKXBQg:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/79GhUoA6g6A&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 09 May 2012 13:00:00 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: The power method: compute only the largest eigenvalue of a matrix</title>
	<guid>http://blogs.sas.com/content/iml/?p=5224</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/yKhL-_0TxYw/</link>
	<description>&lt;p&gt;
When I was at SAS Global Forum last week, a SAS user asked my advice regarding a SAS/IML program that he wrote. One step of the program was taking too long to run and he wondered if I could suggest a way to speed it up. The long-running step was a function that finds the largest eigenvalue (and associated eigenvector) for a matrix that has thousands of rows and columns. He was using the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect080.htm&quot; title=&quot;Documentation of the EIGEN subroutine&quot;&gt;EIGEN subroutine&lt;/a&gt;, which computes &lt;em&gt;all&lt;/em&gt; eigenvalues and eigenvectors&amp;mdash;even though he was only interested in the eigenvalue with the largest magnitude. 
&lt;/p&gt;&lt;p&gt;
I asked some questions about his matrix and discovered that it had some important properties:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; The matrix is symmetric,  which means that  &lt;a href=&quot;http://en.wikipedia.org/wiki/Symmetric_matrix#Properties&quot; title=&quot;Eigenvalues of a symmetric matrix are real&quot;&gt;all of its eigenvalues are real&lt;/a&gt;. 
&lt;/li&gt;&lt;li&gt;
The matrix is 
 &lt;a href=&quot;http://en.wikipedia.org/wiki/Positive-definite_matrix&quot;&gt;positive definite&lt;/a&gt;, which means that all of its eigenvalues are positive. (Covariance and correlation matrices have this property.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

I told him that the &lt;a href=&quot;http://en.wikipedia.org/wiki/Power_method&quot;&gt;power iteration method&lt;/a&gt; is an algorithm that can quickly compute the largest eigenvalue (in absolute value) and associated eigenvector for any matrix, provided that the largest eigenvalue is real and distinct.   Distinct eigenvalues are a &lt;a href=&quot;http://en.wikipedia.org/wiki/Generic_property&quot;&gt;generic property&lt;/a&gt; of the spectrum of a symmetric matrix, so, &lt;a href=&quot;http://en.wikipedia.org/wiki/Almost_surely&quot;&gt;almost surely&lt;/a&gt;,  the eigenvalues of his matrix are both real and distinct. 
&lt;/p&gt;&lt;p&gt;

The power iteration method requires that you repeatedly multiply a candidate eigenvector, &lt;em&gt;v&lt;/em&gt;, by the matrix and then renormalize the image to have unit norm. If you repeat this process many times, the iterates approach the largest eigendirection for almost every choice of the vector &lt;em&gt;v&lt;/em&gt;. You can use that fact to find the eigenvalue and eigenvector. 
&lt;/p&gt;
&lt;h3&gt;The power iteration method when the dominant eigenvalue is positive&lt;/h3&gt;
&lt;p&gt;
The power method produces the eigenvalue of the largest magnitude (called the &lt;em&gt;dominant eigenvalue&lt;/em&gt;) 
and its associated eigenvector provided that
&lt;ol&gt;
&lt;li&gt; The magnitude of the largest eigenvalue is greater than that 
      of any other eigenvalue. That is, the largest eigenvalue is 
      not complex and is not repeated.
&lt;/li&gt;&lt;li&gt; The initial guess for the algorithm is not an eigenvector for a non-dominant eigenvalue and is not orthogonal to the dominant eigendirection.
&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;
It is easy to implement a SAS/IML module that implements the power iteration method for a matrix whose dominant eigenvalue is positive. You can generate a random vector to serve as an initial value for &lt;em&gt;v&lt;/em&gt;, or you can use a fixed vector such as a vector of ones. In either case, you  form the image &lt;em&gt;A v&lt;/em&gt;, normalize that value, and repeat until convergence. This is implemented in the following function:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;proc iml;
/* If the power method converges, the function returns the largest eigenvalue. 
   The associated eigenvector is returned in the first argument, v.
&amp;nbsp;
   If the power method does not converge, the function returns a missing value.
&amp;nbsp;
   The arguments are:
    v    Upon input, contains an initial guess for the eigenvector. 
         Upon return it contains an approximation to the eigenvector.
    A    The matrix whose largest eigenvalue is desired. 
    maxIters The maximum number of iterations.
&amp;nbsp;
   This implementation assume that the largest eigenvalue is positive.
*/
start PowerMethod(v, A, maxIters);
   /* specify relative tolerance used for convergence */
   tolerance = 1e-6; 
   v = v / sqrt( v[##] );  /* normalize */
   iteration = 0; lambdaOld = 0;
&amp;nbsp;
   do while ( iteration &amp;lt;= maxIters);
      z = A*v;                /* transform */
      v = z / sqrt( z[##] );  /* normalize */
      lambda = v` * z;
      iteration = iteration + 1;
      if abs((lambda - lambdaOld)/lambda) &amp;lt; tolerance then
         return ( lambda );
      lambdaOld = lambda;
   end;
   return ( . ); /* no convergence */
finish;
&amp;nbsp;
/* test on small example */
A = {-261 209  -49,
    -530 422  -98,
    -800 631 -144 };
v = {1,2,3}; /* guess */
lambda = PowerMethod(v, A, 40 );
if lambda^=. then do; 
   /* check that result is correct */
   z = (A - lambda*I(nrow(A))) * v; /* test if v is eigenvector for lambda */
   normZ = sqrt( z[##] ); /* || z || should be ~ 0 */
   print lambda normZ; 
end;
else print &amp;quot;Power method did not converge&amp;quot;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_powermethod.png&quot; alt=&quot;&quot; width=&quot;134&quot; height=&quot;59&quot; class=&quot;alignnone size-full wp-image-5290&quot; /&gt;


&lt;h3&gt;Efficiency of the power iteration method&lt;/h3&gt;
&lt;p&gt;
Finding the complete set of eigenvalues and eigenvectors for a dense symmetric matrix is computationally expensive. Multiplying a matrix and a vector is, in comparison, a trivial computation.  I know that the power method will be much, much faster, than computing the full eigenstructure, but I'd like to know how much faster. Let's say I have a moderate-sized symmetric matrix. About how much faster is the power method over computing all eigenvectors? To be definite, I'll compare the times for symmetric matrices that have up to 2,500 rows and columns.
&lt;/p&gt;&lt;p&gt;
I previously have blogged about &lt;a href=&quot;http://blogs.sas.com/content/iml/2011/08/17/solving-linear-systems-which-technique-is-fastest/&quot; title=&quot;matrix inversion versus direct solution&quot;&gt;how to compare the performance of algorithms for solving linear systems&lt;/a&gt;. I will use the same technique to compare the performance  of the PowerMethod function and the EIGEN subroutine. The following loop &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/03/21/creating-symmetric-matrices-two-useful-functions-with-strange-names/&quot; title=&quot;How to construct a random symmetric matrix&quot;&gt;constructs a random symmetric matrix&lt;/a&gt; for a range of matrix sizes. For each matrix, the program times how long it takes the PowerMethod and EIGEN routines to run:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;/***********************************/
/* large random symmetric matrices */
/***********************************/
sizes = do(500, 2500, 250); /* 500, 1000, ..., 2500 */
results=j(ncol(sizes), 3);  /* allocate room for results */
call randseed(12345); 
do i = 1 to ncol(sizes);
   n = sizes[i];
   results[i,1] = n;  /* save size of matrix */
   r = j(n*(n+1)/2, 1);
   call randgen(r, &amp;quot;uniform&amp;quot;);
   r = sqrvech(r); /* make symmetric */
&amp;nbsp;
   q = j(n,1,1);
   t0=time();
   lambda = PowerMethod(q, r, 1000 );
   results[i,2] = time()-t0; /* time for power method */
&amp;nbsp;
   t0=time();
   call eigen(evals, evects, r);
   results[i,3] = time()-t0; /* time for all eigenvals */
end;
labl = {&amp;quot;Size&amp;quot; &amp;quot;PowerT&amp;quot; &amp;quot;EigenT&amp;quot;};
print results[c=labl];&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_powermethod2.png&quot; alt=&quot;&quot; width=&quot;186&quot; height=&quot;302&quot; class=&quot;alignnone size-full wp-image-5289&quot; /&gt;

&lt;p&gt;
The results are pretty spectacular. The power method algorithm is virtually instantaneous, even for large matrices. In comparison, the EIGEN computation is a polynomial-time algorithm in the size of the matrix. You can graph the timing by writing the times to a data set and using the SGPLOT procedure:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;create eigen from results[c=labl];
append from results;
close;
&amp;nbsp;
proc sgplot data=eigen;
series x=Size y=EigenT / legendlabel=&amp;quot;All Eigenvalues&amp;quot;;
series x=Size y=PowerT / legendlabel=&amp;quot;Largest Eigenvalue&amp;quot;;
yaxis grid label=&amp;quot;Time to Compute Eigenvalues&amp;quot;;
xaxis grid label=&amp;quot;Size of Matrix&amp;quot;;
run;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;





&lt;a href=&quot;http://blogs.sas.com/content/iml/files/2012/05/powermethod.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/powermethod.png&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; class=&quot;alignnone size-full wp-image-5291&quot; /&gt;&lt;/a&gt;


&lt;p&gt;
In the interest of full disclosure, the power method converges at a rate that is equal to the ratio of the two largest eigenvalues, so it might take a while to converge if you are unlucky. However, for large matrices the power method should still be much, much, faster than using the EIGEN routine to compute all eigenvalues. The conclusion is clear: The power method wins this race, hands down!
&lt;/p&gt;

&lt;h3&gt;What if the dominant eigenvalue is negative?&lt;/h3&gt;
&lt;p&gt;
If the dominant eigenvalue is negative and &lt;tt&gt;v&lt;/tt&gt; is it's eigenvector, &lt;tt&gt;v&lt;/tt&gt;&lt;tt&gt; and &lt;/tt&gt;&lt;tt&gt;A*v&lt;/tt&gt; point in opposite directions. In this case, the PowerMethod function needs a slight modification to  return the dominant  eigenvalue with the correct sign. There are two ways to do this. The simplest is to 
compute &lt;tt&gt;z = A*(A*v)&lt;/tt&gt; until the algorithm converges, and then compute the eigenvalue for &lt;tt&gt;A&lt;/tt&gt; in a separate step.  An alternative approach is to modify the normalization of &lt;tt&gt;v&lt;/tt&gt; so that it always lies in a particular half-space. This can be accomplished by choosing the direction (&lt;tt&gt;v&lt;/tt&gt; or &lt;tt&gt;-v&lt;/tt&gt;) that has the greatest correlation with the initial guess for &lt;tt&gt;v&lt;/tt&gt;.  I leave this modification to the interested reader.
&lt;/p&gt;

&lt;p&gt;
And to my mathematical friends: did you notice that I used random symmetric matrices when timing the algorithm? Experimentation shows that the dominant eigenvalue for these matrices are always positive. Can anyone point me to a  proof that this is always true? Furthermore, the dominant eigenvalue is approximately equal to &lt;em&gt;n&lt;/em&gt;/2, where &lt;em&gt;n&lt;/em&gt; is the size of the matrix. What is the expected value and distribution of the eigenvalues for these matrices?
&lt;/p&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/matrix-computations/&quot;&gt;Matrix Computations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/numerical-analysis/&quot;&gt;Numerical Analysis&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/statistical-programming/&quot;&gt;Statistical Programming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=yKhL-_0TxYw:w979l8LNG_s:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=yKhL-_0TxYw:w979l8LNG_s:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=yKhL-_0TxYw:w979l8LNG_s:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=yKhL-_0TxYw:w979l8LNG_s:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/yKhL-_0TxYw&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 09 May 2012 09:25:01 +0000</pubDate>
</item>
<item>
	<title>AnnMaria's Blog: Why I Won’t Be Unemployed in 2017: It’s Apples</title>
	<guid>http://www.thejuliagroup.com/blog/?p=2398</guid>
	<link>http://www.thejuliagroup.com/blog/?p=2398</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2011/08/roadinND.jpg&quot;&gt;&lt;img title=&quot;roadinND&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2011/08/roadinND-225x300.jpg&quot; alt=&quot;Shaded road in North Dakota&quot; width=&quot;225&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is a huge inequality in the way the economy has played out among people I know.&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2011/08/roadinND.jpg&quot;&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Business is good and has been getting better all year for me. My friend Jake is doing great. He was an anesthesiologist and several years ago became board-certified in geriatrics. He loves working with older people and his patients love him.&lt;/p&gt;
&lt;p&gt;When I travel around the country, though, or catch up with old friends, I find that is not true everywhere.  Others have been unemployed either continuously, or on and off, for a period over the 99 weeks of unemployment.&lt;/p&gt;
&lt;p&gt;&amp;#8220;People I know&amp;#8221; is hardly a random sample, despite what your average sophomore seems to think, but I still thought it would be interesting to look at the people I&amp;#8217;ve known for a decade or more and see where our paths diverged. Because these were all people I have known for 10, 20, or 30 years, we all were at the same place at one point. So, what happened?&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll tell you what DIDN&amp;#8217;T happen. No one who I know that is long-term unemployed or under-employed is lazy. These are people who have worked construction, cleaned houses, loaded trucks, worked in factories and put in twelve-hour days as middle managers. Also, as you can guess by that list, they also are people who don&amp;#8217;t consider manual labor &amp;#8220;beneath them&amp;#8221;.&lt;/p&gt;
&lt;p&gt;None of these people are stupid. Some speak two languages. Some have two or three years of college.&lt;/p&gt;
&lt;p&gt;Here are three things that did happen, though. One is that they just got old and for those who had spent a lifetime doing physical labor, they just could not do it any more. Their knees, shoulders, hips, hands, back &amp;#8211; you name it &amp;#8211; gave out and they were unable to do physical work. These folks didn&amp;#8217;t have the skills to do a desk job. Even taking a six-month training course on how to use a computer, word-processing, spreadsheets and social media only got them up to where my eighth-grade daughter is already. There aren&amp;#8217;t a lot of positions for people with eighth-grade level computer skills.&lt;/p&gt;
&lt;p&gt;A second thing that happened was they settled down. They had families. They married. They bought houses. When they lost their jobs, they had a husband or wife who still had a job. They had a mortgage to pay. When the factory closed, they couldn&amp;#8217;t just leave town and let the husband/wife watch the kids, work and pay the bills while they went somewhere else and got another apartment and a new job.&lt;/p&gt;
&lt;p&gt;Here is the big, big difference between the two groups of people, though- the people who are unemployed quit their education. They got comfortable as a COBOL programmer, teamster, regional manager. When that job was gone, it turned out there was not a real demand for the person who knew more about the blueprint archive at General Dynamics than anyone else in the world.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why I Won&amp;#8217;t Be Unemployed Five Years from Now&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lately, I have been learning javascript/ jQuery. I put them together because I didn&amp;#8217;t get very far in the project with javascript before jQuery seemed like a really good addition. I hadn&amp;#8217;t done much with IDEs (integrated development environment), mostly using &lt;a href=&quot;http://www.barebones.com/products/textwrangler/&quot;&gt;textwrangler&lt;/a&gt; up to this point or just the SAS editor. I tried a couple of others before settling on &lt;a href=&quot;http://www.jetbrains.com/webstorm/&quot;&gt;Webstorm&lt;/a&gt;, which I like A LOT. Now using an IDE is kind of the programming equivalent to learning Excel, that is not a hugely marketable anything, but more of an assumption. (I confess I still use Textwrangler for quick stuff.)&lt;/p&gt;
&lt;p&gt;Even though my last blog was on how you shouldn&amp;#8217;t be writing things from scratch, I opened up a new directory in Webstorm, created a new HTML page and wrote a slideshow from scratch right from the CSS to &amp;lt;/body&amp;gt; . Just because. I feel like my progress in javascript is slow as mud, but at least now I can write some things. I&amp;#8217;ve also written a couple of basic games. When I read things like the jQuery chapter in &lt;a href=&quot;http://shop.oreilly.com/product/9780596805531.do&quot;&gt;Flanagan&amp;#8217;s book JavaScript: The Definitive Guide&lt;/a&gt;, I feel like I only know the tiniest portion, but I was looking at someone else&amp;#8217;s code today and while there was no way in hell I could have written it in less than a month, I did understand almost everything that was going on, so that&amp;#8217;s progress, too.&lt;/p&gt;
&lt;p&gt;I needed to capture some audio so I downloaded &lt;a href=&quot;http://audio-hijack-pro.en.softonic.com/mac&quot;&gt;audio hijack&lt;/a&gt; and invested 10 minutes in learning to use that. I also needed a voice over so I fiddled with Garageband for half an hour. I&amp;#8217;d used that before but not lately. Every time I use it, it takes me less time to remember, &amp;#8220;Oh yeah, that&amp;#8217;s how you do that again.&amp;#8221;&lt;/p&gt;
&lt;p&gt;I needed to output some mp3 files as ogg files. I don&amp;#8217;t even remember why I had &lt;a href=&quot;http://audacity.sourceforge.net/&quot;&gt;audacity&lt;/a&gt; in my applications folder. I don&amp;#8217;t *think* it came with my new computer. To export as an mp3 file I needed &lt;a href=&quot;http://manual.audacityteam.org/help/manual/man/faq_installation_and_plug_ins.html#lame&quot;&gt;lame&lt;/a&gt;, which I also needed to download.&lt;/p&gt;
&lt;p&gt;JavaScript is definitely a marketable skill. Being able to mess around with sound files, perhaps not as much so, but it may eventually be another &amp;#8220;given&amp;#8221;, like an expectation that you can use a word processor.&lt;/p&gt;
&lt;p&gt;Most of my career has been spent processing structured data, specifically doing what is now sneeringly called &amp;#8220;frequentist&amp;#8221; statistics. Looking to update my syllabus for next year, I&amp;#8217;ve been looking into data mining, both with SAS Enterprise Miner and Statistica. I was able to download the trial version of &lt;a href=&quot;http://www.statsoft.com/&quot;&gt;Statistica&lt;/a&gt; and the &lt;a href=&quot;http://www.sas.com/govedu/edu/programs/od_academics.html&quot;&gt;On-Demand version of SAS Enterprise Miner&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So &amp;#8230;. this is what I have been up to in the last month. Some of those things will not pan out. At one point, I was pretty good with Tel-a-Graf (graphic design software for plotters &amp;#8211; yes, plotters), Foresight &amp;#8211; another programming language which I don&amp;#8217;t think is around any more. I used Lotus Notes and learned SAS FSP (for &amp;#8220;Full Screen Product&amp;#8221;). I&amp;#8217;ve used a VAX, IBM, DEC, Franklin Ace, Lisa and Next computer.&lt;/p&gt;
&lt;p&gt;I think I have identified the dividing line between those whose careers stayed on an upward trend all of these years.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s apples.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/400px-Apples.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-2399&quot; title=&quot;400px-Apples&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/400px-Apples.jpg&quot; alt=&quot;Apples&quot; width=&quot;400&quot; height=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or, to be specific, it&amp;#8217;s the idea of &lt;a href=&quot;http://www.straightdope.com/columns/read/2141/whats-the-story-with-johnny-appleseed&quot;&gt;Johnny Appleseed&lt;/a&gt;. The way I see it, each new thing I learned is like scattering some appleseeds. Most of them will probably get eaten by birds, fall on rocks or be bought by Microsoft and killed off. If you toss enough seeds around, though, some of them will bear fruit and twenty years later, you&amp;#8217;ll have people lined up to pay you for your knowledge of apples.&lt;/p&gt;</description>
	<pubDate>Wed, 09 May 2012 04:38:38 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: How to be a SAS mentor</title>
	<guid>http://blogs.sas.com/content/sgf/?p=2925</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/BUt3qWMNUw0/</link>
	<description>&lt;p&gt;Stanley Fogleman says that SAS can be hard to learn on your own - not because it is a difficult language - but because of the various business requirements. In fact, even college students entering the workforce are often ill-prepared in some ways. That's why Fogleman believes that a SAS mentoring program can be so effective.&lt;span id=&quot;more-2925&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Fogleman says that when he first began learning SAS, he had only six months of mentoring - that was the length of a SAS consultant's contract that he was working with. During that time, he could ask any question that he wanted. After that, he was on his own to learn and figure out the courses to take.&lt;/p&gt;
&lt;p&gt;Since that time, Fogleman has refined a mentoring program for junior programmers. He believes the plan should span one to two years, have executive buy-in and include SAS users group conferences.  &lt;/p&gt;
&lt;p&gt;&quot;Creating a structured learning environment should be the goal of a mentor,&quot; said Fogleman.&lt;/p&gt;
&lt;p&gt;Here are some of his tips for success:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Map training using support.sas.com &lt;a title=&quot;Training based upon jobs and roles&quot; href=&quot;http://support.sas.com/training/us/paths/index.html&quot; target=&quot;_blank&quot;&gt;Learning Paths&lt;/a&gt;, training organized by job roles.&lt;/li&gt;
&lt;li&gt;Provide training milestones and keep track of accomplishments.&lt;/li&gt;
&lt;li&gt;Make yourself available as a resource.&lt;/li&gt;
&lt;li&gt;My favorite resources: SAS-L, sasCommunity.org and SAS Samples and SAS Notes&lt;/li&gt;
&lt;li&gt;Provide coding guidelines.&lt;/li&gt;
&lt;li&gt;Advocate SAS users group conference attendance and participation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&quot;I wish more managers knew about the value of  that local, regional and national SAS users group conferences have,&quot; said Fogleman. &quot;I can say very confidently that most of the SAS code that I've learned has been at conferences.&quot;&lt;/p&gt;
&lt;p&gt;What not to do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Micromanage&lt;/li&gt;
&lt;li&gt;Be a substitute manager&lt;/li&gt;
&lt;li&gt;Criticize&lt;/li&gt;
&lt;li&gt;Monday morning quarterback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&quot;It's about guidance. Structured learning is more efficient,&quot; said Fogleman. &quot;There are many different ways to solve programming problems, but there are also many blind alleys. A SAS mentor can help programmers avoid the blind alleys.&quot;&lt;/p&gt;
&lt;p&gt;Read Fogleman's paper for more advice on &lt;a title=&quot;What is a SAS Mentor? (SAS Global Forum 2012 paper by Stanley Fogleman)&quot; href=&quot;http://support.sas.com/resources/papers/proceedings12/188-2012.pdf&quot; target=&quot;_blank&quot;&gt;What is a SAS Mentor?&lt;/a&gt; If you are interested in becoming a mentor, I'd suggest you contact Fogleman. In his presentation, he included a slide showing how to structure the learning process and accomplishments.
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/mentor/&quot;&gt;mentor&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-programmer/&quot;&gt;sas programmer&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=BUt3qWMNUw0:RRfufPsHcec:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=BUt3qWMNUw0:RRfufPsHcec:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=BUt3qWMNUw0:RRfufPsHcec:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=BUt3qWMNUw0:RRfufPsHcec:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/BUt3qWMNUw0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 08 May 2012 20:14:19 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Making time to write</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2690</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/JD0xjjRBLYw/</link>
	<description>Please don’t tell me that you do not have the time to write a book for SAS Press.  I already know that.  You have a lot of things to attend to:  a demanding job, family responsibilities, housework, yard work, shopping, cooking, eating, reading, favorite TV shows, commuting, sports to play, [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=JD0xjjRBLYw:WSXX5WynO_M:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=JD0xjjRBLYw:WSXX5WynO_M:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/JD0xjjRBLYw&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 08 May 2012 17:01:37 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: SAS has amped up mobile</title>
	<guid>http://blogs.sas.com/content/sgf/?p=2995</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/Nnpn9nvYvGE/</link>
	<description>&lt;p&gt;SAS already has some cool mobile Business Intelligence apps. Now, Scott McQuiggan tells Anna Brown, in this Inside SAS Global Forum interview, that you can view the really cool high-performance analytics reports that you've created on your desktop - right from your mobile device. Check this out!!&lt;span id=&quot;more-2995&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;!-- powered by Iframe plugin ver.2.1 (wordpress.org/extend/plugins/iframe/) --&gt;
&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;a title=&quot;Watch sasglobalforum2012&quot; href=&quot;http://www.livestream.com/sasglobalforum2012?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;sasglobalforum2012&lt;/a&gt; on livestream.com. &lt;a title=&quot;Broadcast Live Free&quot; href=&quot;http://www.livestream.com/?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks&quot;&gt;Broadcast Live Free&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/high-performance-analytics/&quot;&gt;high-performance analytics&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/inside-sas-global-forum/&quot;&gt;Inside SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/mobile-technologies/&quot;&gt;mobile technologies&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-visual-analytics/&quot;&gt;SAS Visual Analytics&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Nnpn9nvYvGE:PvAqId-XIMs:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Nnpn9nvYvGE:PvAqId-XIMs:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=Nnpn9nvYvGE:PvAqId-XIMs:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=Nnpn9nvYvGE:PvAqId-XIMs:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/Nnpn9nvYvGE&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 07 May 2012 13:00:52 +0000</pubDate>
</item>
<item>
	<title>SAS Analysis: Top 10 tips and tricks about PROC SQL</title>
	<guid>tag:blogger.com,1999:blog-3256159328630041416.post-6828858597386067251</guid>
	<link>http://feedproxy.google.com/~r/SasAnalysis/~3/K2QIMe-IWNY/top-10-tips-and-tricks-about-proc-sql.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-O7T2v4o5UCM/T6LbSALwx6I/AAAAAAAABFU/VO9u_5akgSk/s1600/Presentation1.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://2.bp.blogspot.com/-O7T2v4o5UCM/T6LbSALwx6I/AAAAAAAABFU/VO9u_5akgSk/s400/Presentation1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Interestingly, I just found that the most searched keyword is PROC SQL,&amp;nbsp;through the traffic analysis of my tiny blog. The reason possibly is: nowadays everybody knows SQL, more or less; then someone can do some parts of the SAS job by PROC SQL without using any procedure or DATA step.&lt;br /&gt;
&lt;br /&gt;
As a dialect of SQL, PROC SQL can really play a lot of tricks in SAS, which are mostly carried out by DATA step or PROCs. Here I summarize the 10 interesting ones among them. Let's start with the free SAS help dataset SASHELP.CLASS. This dataset contains the weight, height, sex and other information of 19 fake teenagers. In this demo, I primarily paly with the WEIGHT variable from it.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
data class;
   set sashelp.class;
   obs = _n_;
run;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;1.   Calculate the median of a variable &lt;/b&gt;&lt;br /&gt;
This is the task usually done by PROC MEANS.  With the aggregating HAVING&amp;nbsp;clause, PROC SQL can fulfill this purpose as well.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select avg(weight)
   from (select e.weight
   from class e, class d
   group by e.weight
   having sum(case when e.weight = d.weight then 1 else 0 end)
      ge abs(sum(sign(e.weight - d.weight))));
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;2.   Draw a horizontal bar chart&lt;/b&gt;&lt;br /&gt;
It is a substitute in case that we want to have a look at the distribution of a variable but don’t know PROC GPLOT or other plotting procedures.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select age, '|',
   repeat('*',count(*)*4) as frequency
   from class
   group by age
   order by age;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;3.   Return the running total for a variable&lt;/b&gt;&lt;br /&gt;
DATA step and PROC IML both can get this job done, like what I have shown at a &lt;a href=&quot;http://www.sasanalysis.com/2012/01/benchmarking-of-cusum-function-in.html&quot;&gt;previous post&lt;/a&gt;. PROC SQL is the 3rd choice, just with the little help of a subquery at the SELECT clause. &lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select name, weight, 
      (select sum(a.weight) from class as a where a.obs &amp;lt;= b.obs) as running_total
   from class as b;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;4.   Report data with subtotal&lt;/b&gt;&lt;br /&gt;
The first thing in my mind is the powerful REPORT procedure. However, PROC SQL is an alternative with the set operator.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select name, weight
   from class
   union all
   select 'Total', sum(weight) 
   from class;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;5.   Find the column information from metadata&lt;/b&gt;&lt;br /&gt;
SAS stores the metadata at its &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/070-2012.pdf&quot;&gt;DICTIONARY datasets&lt;/a&gt;. PROC SQL can visit the column information easily, without using the CONTENTS procedure.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select name, type, varnum
   from sashelp.vcolumn
   where libname = 'WORK' and memname = 'CLASS';
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;6.   Rank a variable &lt;/b&gt;&lt;br /&gt;
PROC RANK is a really handy tool for this functionality.  Besides it, PROC SQL can do some simple ranking as well.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select name, a.weight, (select count(distinct b.weight)
   from class b
   where b.weight &amp;lt;= a.weight) as rank
   from class a;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;7.   Random sampling &lt;/b&gt;&lt;br /&gt;
PROC SURVEYSELECT involves with too much statistics. If we just need a simple random sampling, PROC SQL is a more popular option. For example, if I want to pick out 8 observations, I can use PROC SQL like:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql outobs = 8;
   select *
   from class
   order by ranuni(1234);
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;8.   Replicate a data set without data&lt;/b&gt;&lt;br /&gt;
In PROC SQL, it is a fairly simple one-sentence statement to create an empty data set. &lt;strike&gt;Not sure DATA step can do it.&lt;/strike&gt; DATA step also &lt;a href=&quot;http://www.sasanalysis.com/2012/05/top-10-tips-and-tricks-about-proc-sql.html#comment-form&quot;&gt;has a way &lt;/a&gt;to do it.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   create table class2 like class;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;9.   Transpose data&lt;/b&gt;&lt;br /&gt;
DATA step ARRAY is a big headache for most people. Suppose that we want to list the names of the teenagers by their genders, PROC SQL has a way to do it, although it may require some complicated queries/subqueries. &lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql;
   select max(case when sex='F'
      then name else ' ' end) as Female,
      max(case when sex='M'
      then name else ' ' end) as Male
   from (select e.sex,
      e.name,
      (select count(*) from class d
      where e.sex=d.sex and e.obs &amp;lt; d.obs) as level
      from class e) 
   group by level;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;10. Count the missing values&lt;/b&gt;&lt;br /&gt;
The great thing in PROC SQL is that the NMISS and N functions under it work for both numeric and character variables. We can also write a&lt;a href=&quot;http://www.sasanalysis.com/2011/09/test-to-count-missing-values-for-large.html&quot;&gt; macro based on them&lt;/a&gt; to search the missing values for all variables. &lt;br /&gt;
&lt;pre&gt;&lt;code&gt;proc sql
   select count(*), nmiss(weight), n(weight)
   from class;
quit;
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3256159328630041416-6828858597386067251?l=www.sasanalysis.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasAnalysis/~4/K2QIMe-IWNY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 07 May 2012 12:42:29 +0000</pubDate>
</item>
<item>
	<title>BI Notes: SAS OLAP Cubes: Viewing Member Properties in Excel and Enterprise Guide</title>
	<guid>http://www.bi-notes.com/?p=3158</guid>
	<link>http://www.bi-notes.com/2012/05/sas-olap-cubes-viewing-member-properties-in-excel-and-enterprise-guide/</link>
	<description>&lt;p&gt;As a follow-up to my earlier post on &lt;a title=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-taking-advantage-of-olap-member-properties/&quot; href=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-taking-advantage-of-olap-member-properties/&quot;&gt;taking advantage of OLAP member properties&lt;/a&gt;, you can also display OLAP member properties through the Add-in for Microsoft Office as well as SAS Enterprise Guide.  I&amp;#8217;m a huge fan of Enterprise Guide, so it&amp;#8217;s nice to have that ability but even nicer when the more common information consumer can display member properties through a Pivot Table in Excel.&lt;/p&gt;
&lt;h2&gt;One Click to More Information&lt;/h2&gt;
&lt;p&gt;Simply right-click the level and select &lt;strong&gt;Show Properties in Report&lt;/strong&gt;.  From there you can check the properties you have defined.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-viewing-member-properties-in-excel-and-enterprise-guide/enable-in-excel/&quot; rel=&quot;attachment wp-att-3163&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-3163&quot; title=&quot;Enable Member Properties in Excel PivotTable&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/enable-in-excel.png&quot; alt=&quot;enable in excel SAS OLAP Cubes: Viewing Member Properties in Excel and Enterprise Guide&quot; width=&quot;386&quot; height=&quot;128&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I like the way the Pivot Table displays member properties as each column in Excel.  This information gives the user a little more insight into the data.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-viewing-member-properties-in-excel-and-enterprise-guide/excel/&quot; rel=&quot;attachment wp-att-3164&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-3164&quot; title=&quot;Showing OLAP Member Properties in Excel&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/excel.png&quot; alt=&quot;excel SAS OLAP Cubes: Viewing Member Properties in Excel and Enterprise Guide&quot; width=&quot;656&quot; height=&quot;404&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Also Works in SAS Enterprise Guide&lt;/h2&gt;
&lt;p&gt;To display member properties through SAS Enterprise Guide the approach is similar, right-click the level and select &lt;strong&gt;Show Member Property&lt;/strong&gt;. From there you can check the member properties you want to display.&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-viewing-member-properties-in-excel-and-enterprise-guide/enable-in-eg/&quot; rel=&quot;attachment wp-att-3167&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-3167&quot; title=&quot;Display OLAP Member Properties in Enterprise Guide&quot; src=&quot;http://www.bi-notes.com/wp-content/uploads/2012/05/enable-in-eg.png&quot; alt=&quot;enable in eg SAS OLAP Cubes: Viewing Member Properties in Excel and Enterprise Guide&quot; width=&quot;385&quot; height=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;More about OLAP Member Properties&lt;/h2&gt;
&lt;p&gt;Check out my &lt;a title=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-taking-advantage-of-olap-member-properties/&quot; href=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-taking-advantage-of-olap-member-properties/&quot;&gt;earlier post&lt;/a&gt; to see how these same OLAP member properties are defined and displayed in SAS Web Report Studio.&lt;/p&gt;
&lt;div class=&quot;betterrelated&quot;&gt;&lt;p&gt;&lt;strong&gt;Related content:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/05/sas-olap-cubes-taking-advantage-of-olap-member-properties/&quot; title=&quot;Permanent link to SAS OLAP Cubes: Taking Advantage of OLAP Member Properties&quot;&gt;SAS OLAP Cubes: Taking Advantage of OLAP Member Properties&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/09/sas-bi-tool-overview/&quot; title=&quot;Permanent link to SAS Business Intelligence Tools Overview&quot;&gt;SAS Business Intelligence Tools Overview&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/12/sas-olap-cubes-tailing-time-based-data-dynamic-results/&quot; title=&quot;Permanent link to SAS OLAP Cubes: Tailing Time-Based Data for Dynamic Results&quot;&gt;SAS OLAP Cubes: Tailing Time-Based Data for Dynamic Results&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2011/09/building-sas-business-intelligence-book/&quot; title=&quot;Permanent link to Building Business Intelligence Using SAS Book&quot;&gt;Building Business Intelligence Using SAS Book&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://www.bi-notes.com/2012/01/sas-bi-best-practices-letting-sas-enterprise-guide-write-mdx-code/&quot; title=&quot;Permanent link to Best Practices: Letting SAS Enterprise Guide Write MDX Code&quot;&gt;Best Practices: Letting SAS Enterprise Guide Write MDX Code&lt;/a&gt;  &lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 07 May 2012 11:06:35 +0000</pubDate>
</item>
<item>
	<title>SAS and R: Example 9.30: addressing multiple comparisons</title>
	<guid>tag:blogger.com,1999:blog-1275149608391671670.post-872113636495893376</guid>
	<link>http://feedproxy.google.com/~r/SASandR/~3/wgI2a6YEE0s/example-930-addressing-multiple.html</link>
	<description>&lt;a href=&quot;http://3.bp.blogspot.com/-bH02R3uu-Ok/T5gNMHdEUEI/AAAAAAAAAIs/FkW7Fdi7ges/s1600/Rplot.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/-bH02R3uu-Ok/T5gNMHdEUEI/AAAAAAAAAIs/FkW7Fdi7ges/s1600/Rplot.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5735348627266883650&quot; /&gt;&lt;/a&gt;&lt;br /&gt;We've been more sensitive to accounting for &lt;a href=&quot;http://en.wikipedia.org/wiki/Multiple_comparisons&quot;&gt;multiple comparisons&lt;/a&gt; recently, in part due to &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/pubmed/21185405&quot;&gt;work&lt;/a&gt; that Nick and colleagues published on the topic.  &lt;br /&gt;&lt;br /&gt;In this entry, we consider results from a &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/pubmed/19752409&quot;&gt;randomized trial&lt;/a&gt; (Kypri et al., 2009) to reduce problem drinking in Australian university students.  &lt;br /&gt;Seven outcomes were pre-specified: three designated as primary and four as secondary.  No adjustment for multiple comparisons was undertaken.  The p-values were given as 0.001, 0.001 for the primary outcomes and 0.02 and .001, .22, .59 and .87 for the secondary outcomes.  &lt;br /&gt;In this entry, we detail how to adjust for multiplicity using R and SAS.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;R&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The &lt;tt&gt;p.adjust()&lt;/tt&gt; function in R calculates a variety of different approaches for multiplicity adjustments given a vector of p-values.  These include the Bonferroni procedure (where the alpha is divided by the number of tests or equivalently the p-value is multiplied by that number, and truncated back to 1 if the result is not a probability). Other, less conservative corrections are also included (these are Holm (1979), Hochberg (1988), Hommel (1988), Benjamini and Hochberg (1995) and Benjamini and Yekutieli (2001)).  The first four methods provide strong control for the family-wise error rate and all dominate the Bonferroni procedure.  Here we compare the results from the unadjusted, Benjamini and Hochberg &lt;tt&gt;method=&quot;BH&quot;&lt;/tt&gt; and Bonferroni procedure for the Kypri et al. study.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;pvals = c(.001, .001, .001, .02, .22, .59, .87)&lt;br /&gt;BONF = p.adjust(pvals, &quot;bonferroni&quot;)&lt;br /&gt;BH = p.adjust(pvals, &quot;BH&quot;)&lt;br /&gt;res = cbind(pvals, BH=round(BH, 3), BONF=round(BONF, 3))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This yields the following results:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    pvals    BH  BONF&lt;br /&gt;[1,] 0.001 0.002 0.007&lt;br /&gt;[2,] 0.001 0.002 0.007&lt;br /&gt;[3,] 0.001 0.002 0.007&lt;br /&gt;[4,] 0.020 0.035 0.140&lt;br /&gt;[5,] 0.220 0.308 1.000&lt;br /&gt;[6,] 0.590 0.688 1.000&lt;br /&gt;[7,] 0.870 0.870 1.000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The only substantive difference between the three sets of unadjusted and adjusted p-values is seen for the 4th most significant outcome, which remains statistically significant at the alpha=0.05 level for all but the Bonferroni procedure.&lt;br /&gt;&lt;br /&gt;It is straightforward to graphically display these results (as seen above):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;matplot(res, ylab=&quot;p-values&quot;, xlab=&quot;sorted outcomes&quot;)&lt;br /&gt;abline(h=0.05, lty=2)&lt;br /&gt;matlines(res)&lt;br /&gt;legend(1, .9, legend=c(&quot;Bonferroni&quot;, &quot;Benjamini-Hochberg&quot;, &quot;Unadjusted&quot;), &lt;br /&gt;  col=c(3, 2, 1), lty=c(3, 2, 1), cex=0.7)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It bears mentioning here that the Benjamini-Hochberg procedure really only make sense in the gestalt.  That is, it would probably be incorrect to take the adjusted p-values from above and remove them from the context of the 7 tests performed here.  The correct use (as with all tests) is to pre-specify the alpha level, and reject tests with p-values that are smaller.  What &lt;tt&gt;p.adjust()&lt;/tt&gt; reports is the smallest family-wise alpha error under which each of the tests would result in a rejection of the null hypothesis.  But the nature of the Benjamini-Hochberg procedure is that this value may well depend on the other observed p-values.  We will explore this further in a later entry.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SAS&lt;/b&gt;&lt;br /&gt;The &lt;tt&gt;multtest&lt;/tt&gt; procedure will perform a number of multiple testing procedures.  It works with raw data for ANOVA models, and can also accept a list of p-values as shown here.  (Note that &quot;FDR&quot; (false discovery rate) is the name that Benjamini and Hochberg give to their procedure and that this nomenclature is used by SAS.)  Various other procedures can do some adjustment through, e.g., the &lt;tt&gt;estimate&lt;/tt&gt; statement, but &lt;tt&gt;multtest&lt;/tt&gt; is the most flexible.  A plot similar to that created in R is shown below.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;data a;&lt;br /&gt;   input Test$ Raw_P @@;&lt;br /&gt;   datalines;&lt;br /&gt;test01  0.001    test02  0.001    test03  0.001&lt;br /&gt;test04  0.02    test05  0.22    test06  0.59&lt;br /&gt;test07  0.87&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;proc multtest inpvalues=a bon fdr plots=adjusted(unpack);&lt;br /&gt;run;&lt;br /&gt;                                                     False&lt;br /&gt;                                                 Discovery&lt;br /&gt;            Test           Raw    Bonferroni          Rate&lt;br /&gt;&lt;br /&gt;               1        0.0010        0.0070        0.0023&lt;br /&gt;               2        0.0010        0.0070        0.0023&lt;br /&gt;               3        0.0010        0.0070        0.0023&lt;br /&gt;               4        0.0200        0.1400        0.0350&lt;br /&gt;               5        0.2200        1.0000        0.3080&lt;br /&gt;               6        0.5900        1.0000        0.6883&lt;br /&gt;               7        0.8700        1.0000        0.8700&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-g_r6CSu2T-w/T5m73WDk9jI/AAAAAAAADiw/nhWkIIxFo0k/s1600/AdjByRawRank.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/-g_r6CSu2T-w/T5m73WDk9jI/AAAAAAAADiw/nhWkIIxFo0k/s1600/AdjByRawRank.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5735822159920821810&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An unrelated note about aggregators:&lt;/b&gt;We love aggregators!  Aggregators collect blogs that have similar coverage for the convenience of readers, and for blog authors they offer a way to reach new audiences.  &lt;a href=&quot;http://sas-and-r.blogspot.com/&quot;&gt;SAS and R&lt;/a&gt; is aggregated by &lt;a href=&quot;http://www.r-bloggers.com/&quot;&gt;R-bloggers&lt;/a&gt; and &lt;a href=&quot;http://proc-x.com/&quot;&gt;PROC-X&lt;/a&gt; with our permission, and by at least 2 other aggregating services which have never contacted us.  If you read this on an aggregator that does not credit the blogs it incorporates, please come visit us at &lt;a href=&quot;http://sas-and-r.blogspot.com/&quot;&gt;SAS and R&lt;/a&gt;.  We answer comments there and offer direct subscriptions if you like our content.  In addition, no one is allowed to profit by this work under our &lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/&quot;&gt;license&lt;/a&gt;; if you see advertisements on this page, the aggregator is violating the terms by which we publish our work.&lt;pre&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1275149608391671670-872113636495893376?l=sas-and-r.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=wgI2a6YEE0s:3gknF6w-NZA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=wgI2a6YEE0s:3gknF6w-NZA:J3aVl1i_38o&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=J3aVl1i_38o&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=wgI2a6YEE0s:3gknF6w-NZA:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=wgI2a6YEE0s:3gknF6w-NZA:63t7Ie-LG7Y&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=63t7Ie-LG7Y&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=wgI2a6YEE0s:3gknF6w-NZA:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?i=wgI2a6YEE0s:3gknF6w-NZA:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=wgI2a6YEE0s:3gknF6w-NZA:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?i=wgI2a6YEE0s:3gknF6w-NZA:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SASandR/~4/wgI2a6YEE0s&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 07 May 2012 10:55:00 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: Checking your answers: Are computed values close to the true values?</title>
	<guid>http://blogs.sas.com/content/iml/?p=5252</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/0y2UR9eVFwk/</link>
	<description>&lt;p&gt;
In statistical programming, I often test a program by running it on a problem for which I know the correct answer. I often use a single expression to compute the maximum value of the absolute difference between the vectors:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;maxDiff = max( abs( z-correct ) ); /* largest absolute difference */&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;p&gt;
In this expression, &lt;tt&gt;z&lt;/tt&gt; is the vector that I have computed and &lt;tt&gt;correct&lt;/tt&gt; is the correct answer. 
&lt;/p&gt;&lt;p&gt;
Let's break this expression down into pieces:
&lt;ul&gt;
&lt;li&gt; &lt;tt&gt;(z - correct)&lt;/tt&gt; is the difference between the two vectors. They must have the same number of elements in order for this expression to make sense. The result is the elementwise difference. That is, the expression resolves to a temporary vector (let's call it &lt;tt&gt;diff&lt;/tt&gt;) that is the same length as &lt;tt&gt;z&lt;/tt&gt; and the &lt;em&gt;i&lt;/em&gt;th element is equal to &lt;tt&gt;z[i] - correct[i]&lt;/tt&gt;.
&lt;/li&gt;
&lt;li&gt; The ABS function returns a vector that contains the absolute values of each element of its argument. &lt;/li&gt;
&lt;li&gt; The MAX function returns a scalar value that is the maximum value of the elements of its argument. &lt;/li&gt;
&lt;/ul&gt;
Consequently, the expression returns a scalar value that is the largest absolute difference between the vector &lt;tt&gt;z&lt;/tt&gt; and the vector &lt;tt&gt;correct&lt;/tt&gt;.
&lt;/p&gt;

&lt;p&gt;
For example, last week I showed &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/05/02/the-dif-function/&quot;&gt;how you can use the DIF function to compute simple finite-difference approximations to derivatives&lt;/a&gt;. In that article, I computed an approximate derivative to the sine function and compared it to the true derivative, as follows:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;proc iml;
h = 0.1;
x = T( do(0, 6.28, h) );     /* x in [0, 2 pi] */
y = sin(x);
approx =  dif(y, 1) / h;     /* f'(x) ~ (f(x)-f(x-h))/h */
correct = cos(x);            /* true derivatives at x */
maxBDiff = max(abs(approx - correct)); /* find maximum difference */
print maxBDiff;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_dif.png&quot; alt=&quot;&quot; width=&quot;75&quot; height=&quot;58&quot; class=&quot;alignnone size-full wp-image-5207&quot; /&gt;

&lt;p&gt;
The output tells me that the approximate derivative and the true value differ by about 0.05 for some value of the &lt;tt&gt;x&lt;/tt&gt; vector. 
&lt;/p&gt;
&lt;p&gt;
It is interesting to note that you can use the exact same expression if &lt;tt&gt;correct&lt;/tt&gt; is a scalar value. In this case, you are computing the maximum absolute deviation between a vector of values and a target value.
&lt;/p&gt;
&lt;h3&gt;Other ways to compute differences and deviations&lt;/h3&gt;
&lt;p&gt;
In statistics, a difference between two values is called a &lt;em&gt;deviation&lt;/em&gt;, especially when one expression is an estimate and another is an expected value. In the language of statistics, the expression in the previous section is similar to the maximum absolute deviation. There are other statistical concepts that you can use to measure the difference between two vectors, or between a vector and a target value:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Mean absolute deviation&lt;/strong&gt;: Instead of taking the maximum, you can compute the mean of the absolute differences: &lt;tt&gt;(abs(z-correct))[:]&lt;/tt&gt;. Recall that the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_workmatrix_sect014.htm&quot;&gt;colon (:) subscript operator&lt;/a&gt; is a convenient way to compute the mean of a vector in the SAS/IML language.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Median absolute deviation&lt;/strong&gt;: The mean absolute deviation is sensitive to large values. &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/01/27/detecting-outliers-in-sas-part-2-estimating-scale/&quot;&gt;A robust alternative is the median absolute deviation (MAD)&lt;/a&gt;, which you can compute by using the built-in &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect185.htm&quot;&gt;MAD function&lt;/a&gt;: &lt;tt&gt;mad(z-correct)&lt;/tt&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Sum of squared errors&lt;/strong&gt;: You can use the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect285.htm&quot;&gt;SSQ function&lt;/a&gt; to compute the sum of squared errors between two vectors: 
&lt;tt&gt;ssq(z-correct)&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Mean squared error&lt;/strong&gt;: Compute the mean of the squared deviations. Define &lt;tt&gt;diff = z-correct&lt;/tt&gt;. Then  &lt;tt&gt;ssq(diff)/countn(diff)&lt;/tt&gt; is the mean squared error.  I use the COUNTN function rather than the NCOL function in case there are missing values in the &lt;tt&gt;diff&lt;/tt&gt; vector. &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Root mean squared error&lt;/strong&gt;: The square root of the previous quantity is the root mean squared error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
There are other measures that you can use (such as relative quantities), but these are some common ways to compute a measure of how much one vector of values differs from another.
&lt;/p&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/getting-started/&quot;&gt;Getting Started&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/statistical-programming/&quot;&gt;Statistical Programming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=0y2UR9eVFwk:JFZwF8bEm-Q:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=0y2UR9eVFwk:JFZwF8bEm-Q:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=0y2UR9eVFwk:JFZwF8bEm-Q:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=0y2UR9eVFwk:JFZwF8bEm-Q:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/0y2UR9eVFwk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 07 May 2012 09:25:39 +0000</pubDate>
</item>
<item>
	<title>AnnMaria's Blog: Do Not Re-Invent the Software Wheel unless you’re into wheel-inventing</title>
	<guid>http://www.thejuliagroup.com/blog/?p=2393</guid>
	<link>http://www.thejuliagroup.com/blog/?p=2393</link>
	<description>&lt;p&gt;So I say,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;There may be some useful information in the text fields. For example, people who use credit to buy commodities, such as meat may differ from people who buy finished goods like clothing who may differ from people who purchase machinery on credit. Perhaps you may want to consider some kind of clustering.&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The very bright young people nod and one says quite brightly to another,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;Well, you better get out your grep statements.&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;All of the rest nod in pleased agreement, while I say to my old and faded self,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Grep? That&amp;#8217;s what you&amp;#8217;ve got? Seriously? What. The. Fuck.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Okay, ten points for the bright young people for knowing any Unix commands or even that Unix exists, which puts them ahead of a lot of people. However, please explain to me why in the name of God you would not even consider using something like Statistica or SAS Enterprise Miner ? There is an R text mining package. I have never used it because I don&amp;#8217;t use R (&lt;a href=&quot;http://www.thejuliagroup.com/blog/?p=1757&quot;&gt;long discussion of that here&lt;/a&gt;) but these young people had spent three semesters learning  to program R and did not even know it existed.&lt;/p&gt;
&lt;p&gt;At one point I was playing around with both Ruby and SAS to write a program to parse text. Do you have any idea how much of a pain in the ass that is? In that case, because it was on a set of data with a VERY limited scope, we could do it by using just a few hundred words.  It was a small project with a very small budget and at the time I was wanting a project that gave me an excuse to learn Ruby.&lt;/p&gt;
&lt;p&gt;For a more general project with the whole English language as its scope, that would be an insane undertaking. It would cost the client several times the cost of buying a SAS license or Statistica (not sure about the SPSS offering) &amp;#8211; and what I could write would not be within shouting distance of as well done and comprehensive as something a team of people had worked on for years.&lt;/p&gt;
&lt;p&gt;The most recent client who asked me this actually has a SAS Enterprise Miner license at their organization! (So, yes, while the license fee is humongous, since it had already been paid, the additional cost to use it on this project would be zero.)&lt;/p&gt;
&lt;p&gt;While this is the latest, most outrageous example, the &amp;#8220;Do-It-Yourself&amp;#8221; fallacy happens all the time.  Recently, I needed to do a slideshow. I thought I would write it using javascript/ jQuery because that is something else I have been wanting to learn better and the Codecademy thing just didn&amp;#8217;t do it for me. I wanted an actual project.&lt;/p&gt;
&lt;p&gt;I started on it and after about ten minutes of reflection realized there were probably dozens of jQuery plug-ins that did slide shows of every size, shape and form. Sure enough, 5 seconds on Google gave me a couple to download.&lt;/p&gt;
&lt;p&gt;I downloaded one, modified it a bit and it was okay, though I&amp;#8217;m not sure it is exactly what I want either. When I looked at the code in detail, it was evident the author had done the same as me, downloaded someone else&amp;#8217;s code and modified it, because there were entire directories in there that did nothing. So, I deleted those.&lt;/p&gt;
&lt;p&gt;After playing with that for a while, I thought perhaps there were other, better, slideshow plug-ins available. I downloaded another one because, even though I knew it probably wouldn&amp;#8217;t suit my purpose, it was written so much more succinctly, I found it interesting.&lt;/p&gt;
&lt;p&gt;So &amp;#8230;. two lessons&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Don&amp;#8217;t waste your time creating something that has already been created.&lt;/li&gt;
&lt;li&gt;Even if you do want to create something, either just for the hell of it or as a learning experience, you&amp;#8217;ll probably learn a lot and end up with a better product, faster, if you build on what other people have already done rather than start with a blank page and Notepad++&lt;/li&gt;
&lt;/ol&gt;</description>
	<pubDate>Mon, 07 May 2012 06:39:34 +0000</pubDate>
</item>
<item>
	<title>From a Logical Point of View: Blogging is Awesome: CDISC Bloggers</title>
	<guid>http://www.jiangtanghu.com/blog/?p=598</guid>
	<link>http://feedproxy.google.com/~r/jiangtanghu/~3/xK0lUh69w9E/</link>
	<description>&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://peterdewolf.com/i-remember-when-blogging-was-cool/&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;I remember when blogging was cool.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Before the specializing and monetizing and Twitter-izing.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#8212;&lt;/font&gt;&lt;a href=&quot;http://peterdewolf.com/&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;Peter Dewolf&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Well I think blogging is still cool (&lt;em&gt;and &lt;/em&gt;&lt;/font&gt;&lt;a href=&quot;http://add-vodka.com/7-reasons-why-blogging-is-awesome/&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;awesome&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt; and &lt;/font&gt;&lt;/em&gt;&lt;a href=&quot;http://elevenminuteawesome.com/12-reasons-blogging-awesome/&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;awesome&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; …). The most appealing personal reason is, blog posts are Google searchable and suitable for archive while Tweets NOT. Admittedly I hold some sort of&amp;#160; &lt;/font&gt;&lt;a href=&quot;http://www.jiangtanghu.com/blog/2012/02/29/not-documented-not-exist/&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;Existentialism 2.0&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;: &lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;font size=&quot;1&quot;&gt;if it is not Google searched, it doesn’t exit!&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Last month I placed a post on how to &lt;/font&gt;&lt;a href=&quot;http://www.d-wise.com/blog/2012/04/26/keep-pace-with-cdisc/&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;keep pace with CDISC&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;&lt;em&gt;&amp;#160;&lt;/em&gt;from its official channel&lt;em&gt;s &lt;/em&gt;and I feel cool to add an appendix of source from the &lt;em&gt;awesome&lt;/em&gt; blogosphere. Fortunately or not, CDISC is still in the niche market of topics and it takes few efforts to get the list(update me if someone else available! if you are a Google Reader user, just simply import &lt;/font&gt;&lt;a href=&quot;http://jiangtanghu.com/docs/en/google-reader-subscriptions_CDISC_JiangtangHu.xml&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;this file&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;, my Google Reader subscription on CDISC):&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;1. Blog @ &lt;/font&gt;&lt;/strong&gt;&lt;a href=&quot;http://www.assero.co.uk&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;Assero&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt; by &lt;/font&gt;&lt;/strong&gt;&lt;a href=&quot;http://www.assero.co.uk/about/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;Dave Iberson-Hurst&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt; (“Dave IH”)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.assero.co.uk/category/blog/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://www.assero.co.uk/category/blog/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Insightful and full of humor. I retweeted all of its latest posts and you can feel somehow on these tittles (YES on CDISC):&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;h4&gt;&lt;a href=&quot;http://www.assero.co.uk/2012/what-i-want-what-i-really-really-want/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;What I Want, What I Really Really Want&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.assero.co.uk/2012/churchill-the-fda-and-a-fall/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;Churchill, the FDA and a Fall&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.assero.co.uk/2012/mad-march-and-the-fda/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;Mad March and the FDA&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Btw, I write blogs casual way while it is very impressive to read IH reminding me the George Orwell style.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;/font&gt;&lt;a href=&quot;http://www.d-wise.com/&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt;d-Wise Technologies&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt; Blog&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.d-wise.com/blog/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://www.d-wise.com/blog/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;It is my employer’s official blog site where &lt;/font&gt;&lt;a href=&quot;http://www.linkedin.com/pub/chris-decker/8/52/72&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;Chris Decker&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; is the key contributor to CDISC. You can check out his latest posts on &lt;/font&gt;&lt;a href=&quot;http://www.phuse.eu/css&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;FDA/PhUSE Annual Computational Science Symposium&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; where he served as committee lead:&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;h4&gt;&lt;a href=&quot;http://www.d-wise.com/blog/2012/03/08/overcoming-industry-challenges-a-shift-to-collaboration/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;Overcoming Industry Challenges: A Shift to Collaboration&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.d-wise.com/blog/2012/03/19/validation-and-quality-are-they-the-same/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;Validation and Quality: Are They the Same?&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;I will also commit to update this blog as my understanding on clinical standards goes. Here is the saying:&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;font size=&quot;1&quot;&gt;look to the master,        &lt;br /&gt;follow the master,         &lt;br /&gt;walk with the master,         &lt;br /&gt;see through the master,         &lt;br /&gt;become the master.&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt;3.&amp;#160; &lt;/strong&gt;&lt;/font&gt;&lt;a href=&quot;http://www.xml4pharma.com/&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt;XML4Pharma&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt; Blog&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://cdiscguru.blogspot.com/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://cdiscguru.blogspot.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;with industry news and hard (while cool) way writing on XML (CDISC ODM, define.xml).&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;4. &lt;/font&gt;&lt;/strong&gt;&lt;a href=&quot;http://blog.clinovo.com/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;eClinical Trends&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt; by &lt;/font&gt;&lt;a href=&quot;http://www.clinovo.com/&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;Clinovo&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://blog.clinovo.com/category/cdisc/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://blog.clinovo.com/category/cdisc/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Clinovo jumps to this topic by launching a CDISC SDTM convertor CDISC Express.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;strong&gt;5. eClinicalOpinion&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://eclinicalopinion.blogspot.com/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://eclinicalopinion.blogspot.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;This blog is most focused on EDC, the clinical data management part. I like its &lt;a href=&quot;http://eclinicalopinion.blogspot.com/2009/05/odm-tutorial-index.html&quot; target=&quot;_blank&quot;&gt;series discussion on CDISC ODM&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;strong&gt;6. eCTD Regulatory Submissions Network&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://ectdregulatorysubmissionsnetwork.blogspot.com/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://ectdregulatorysubmissionsnetwork.blogspot.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;This is a personal blog by Shakul Hameed. I read it mostly to get some information on submission requirements from European regulatory.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://cdisc-end-to-end.blogspot.com/&quot;&gt;&lt;font size=&quot;1&quot;&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt;7. HL7 Watch&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://hl7-watch.blogspot.com/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://hl7-watch.blogspot.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;while it is not CDISC directly related (#6 also), it’s nice to get some voice of &lt;/font&gt;&lt;a href=&quot;http://www.hl7.org/&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;HL7&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; which would be the future of CDISC.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#ffffff&quot; size=&quot;1&quot;&gt;&lt;strong&gt;8. From a Logical Point of View-CDISC&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.jiangtanghu.com/blog/category/cdisc/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://www.jiangtanghu.com/blog/category/cdisc/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Yes this one, my 2 cents. I will keep recording my personal immersion and understanding on CDISC and related clinical standards. (while it is privilege to cross reference oneself in his/her own blog! Keep awesome, keep blogging.) &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size=&quot;1&quot;&gt;9. Linked Data and URI&lt;font color=&quot;#ff0000&quot;&gt;:&lt;/font&gt;s for Enterprises&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://kerfors.blogspot.com/&quot;&gt;&lt;font size=&quot;1&quot;&gt;http://kerfors.blogspot.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;Look at the colon (:) in the title of this blog and you’re right this blog plays (at least) with XML. I find it is good resource (thanks &lt;a href=&quot;https://twitter.com/kerfors&quot;&gt;@kerfors&lt;/a&gt; for referencing!) to learn ODM, the foundation of CDISC while the latest post is &lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;em&gt;&lt;a href=&quot;http://kerfors.blogspot.com/2012/05/semantic-models-for-cdisc-based.html&quot; target=&quot;_blank&quot;&gt;Semantic models for CDISC based standard and metadata management&lt;/a&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;1&quot;&gt;P.S.: Blogger &lt;/font&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;Chris Hemedinger&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; maintains a nice &lt;/font&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2010/12/02/aggregating-assault-sas-blogs-are-everywhere/&quot; target=&quot;_blank&quot;&gt;&lt;font size=&quot;1&quot;&gt;list of SAS bloggers&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt; (&lt;/font&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2010/12/10/blogs-by-sas-employees-google-reader-bundle/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;blogs by SAS employees&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;, and &lt;/font&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2010/12/10/blogs-by-sas-community-google-reader-bundle/&quot;&gt;&lt;em&gt;&lt;font size=&quot;1&quot;&gt;blogs by SAS customers, consultants, and the analytics community&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;font size=&quot;1&quot;&gt;).&lt;/font&gt;&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?a=xK0lUh69w9E:Zli01IRpyAQ:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?a=xK0lUh69w9E:Zli01IRpyAQ:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?i=xK0lUh69w9E:Zli01IRpyAQ:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?a=xK0lUh69w9E:Zli01IRpyAQ:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?a=xK0lUh69w9E:Zli01IRpyAQ:YwkR-u9nhCs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?d=YwkR-u9nhCs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?a=xK0lUh69w9E:Zli01IRpyAQ:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/jiangtanghu?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/jiangtanghu/~4/xK0lUh69w9E&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sat, 05 May 2012 02:42:32 +0000</pubDate>
</item>
<item>
	<title>SAS Users Groups: Sentiment analysis: Mining the hearts and minds</title>
	<guid>http://blogs.sas.com/content/sgf/?p=3002</guid>
	<link>http://feedproxy.google.com/~r/SasGlobalForumBlog/~3/xhc03YHlU2Q/</link>
	<description>&lt;p&gt;It is becoming more and more apparent that social media is a gold mine of unstructured data that is just waiting to be analysed so that the nuggets can be extracted. At SAS Global Forum, I was particularly impressed with the diversified use of sentiment analysis and the exploration that has been conducted into the field of social media. I attended a number of great presentations and an extremely interesting Super Demo on the analysis of consumers’ moods during Super Bowl commercials.&lt;span id=&quot;more-3002&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Analyzing passion&lt;/h2&gt;
&lt;p&gt;The Super Demo detailed how to use mood statements alongside sentiment analysis to measure in more detail the emotion displayed by people - more than would be possible with sentiment analysis alone. For example, the underlying purpose of advertising is to generate a reaction, hopefully positive, to a particular product or service. The key, therefore, is to understand this reaction through the use of social media to determine the best marketing strategies to implement.&lt;/p&gt;
&lt;p&gt;Text analytics can be used here to derive the emotions people are displaying through the words and phrases they use on social networking sites such as Twitter and Facebook. From this data, sentiment and intensity (defined here as the “passion” component) can be derived to determine which commercials hit the mark with their targeted audience. Read this &lt;a title=&quot;Sentiment analysis of Superbowl ads (blog post by Richard Foley - text mining guru)&quot; href=&quot;http://blogs.sas.com/content/text-mining/2012/02/08/in-the-mood-how-analyzing-superbowl-ads-using-mood-states-is-more-revealing-than-sentiment-alone/&quot; target=&quot;_blank&quot;&gt;blog post by Richard Foley about analyzing sentiment&lt;/a&gt; for more information about the Superbowl research.&lt;/p&gt;
&lt;h2&gt;Predicting outcomes&lt;/h2&gt;
&lt;p&gt;Another thought-provoking presentation on a novel implementation of sentiment analysis and forecasting was given on the topic of predicting electoral outcomes. The purpose of this presentation and paper was to try to predict the outcomes of popular elections through social media when polling data is not necessarily available. It also demonstrated the ability to validate election outcomes and check for potential instances of fraudulent election administration.&lt;/p&gt;
&lt;p&gt;What was interesting (maybe more than the demonstration on popular elections) was the demonstration of this same methodology on the popular television show American Idol!&lt;/p&gt;
&lt;p&gt;The four-step methodology given to achieve this through the extraction, validation, analysis, and prediction of outcomes from the relevant social media data was:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Extract a set of Tweets about the candidate of interest.&lt;/li&gt;
&lt;li&gt;Filter the Tweets to ensure that the keyword pulls are relevant.&lt;/li&gt;
&lt;li&gt;Analyse the Tweets for positive or negative sentiment around a candidate using sentiment analysis.&lt;/li&gt;
&lt;li&gt;Predict contest winners based on the aggregate sentiment scores for the candidate of interest over time using forecasting.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This process allows researchers to surface the general opinions of the social sphere at differing time points to determine a view of sentiment before and after a particular event, for example an eviction from the show.&lt;/p&gt;
&lt;p&gt;Not only is sentiment analysis crucial for this exploration, but there are also forecasting applications to determine future events given the textual information that has been determined from the sentiment analysis. Check out Jenn Sykes’ full paper, &lt;em&gt;&lt;a title=&quot;Predicting Electoral Outcomes with SAS ® Sentiment Analysis and SAS ® Forecast Studio (SAS Global Forum 2012 paper by Jenn Sykes)&quot; href=&quot;http://support.sas.com/resources/papers/proceedings12/131-2012.pdf&quot; target=&quot;_blank&quot;&gt;Predicting Electoral Outcomes with SAS ® Sentiment Analysis and SAS ® Forecast Studio&lt;/a&gt;&lt;/em&gt;. Also take a minute to watch her in this short &lt;a title=&quot;Inside SAS Global Forum interview (interview with Jenn Sykes)&quot; href=&quot;http://blogs.sas.com/content/sgf/2012/05/04/fridays-innovation-inspiration-a-trend-fraud-sniffer&quot; target=&quot;_blank&quot;&gt;Inside SAS Global Forum interview&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With regards to the application of sentiment analysis in other sectors, I can see that there is certainly potential here in the financial sector, where there is a great need for information on sentiment from customers, not only for marketing-related activities, but also customer retention and acquisition.&lt;/p&gt;
&lt;p&gt;This year’s conference was a fantastic display of what to look forward to in the world of analytics, and the next SAS Global Forum, San Francisco April 28th thru May 1st is already in the diary!
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/inside-sas-global-forum/&quot;&gt;Inside SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/papers-presentations/&quot;&gt;papers &amp;amp; presentations&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-global-forum/&quot;&gt;SAS Global Forum&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/sas-sentiment-analysis/&quot;&gt;SAS Sentiment Analysis&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/social-media/&quot;&gt;social media&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/text-mining/&quot;&gt;text mining&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sgf/tag/unstructured-data/&quot;&gt;unstructured data&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=xhc03YHlU2Q:qcncorUk9YA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=xhc03YHlU2Q:qcncorUk9YA:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?i=xhc03YHlU2Q:qcncorUk9YA:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?a=xhc03YHlU2Q:qcncorUk9YA:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SasGlobalForumBlog?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasGlobalForumBlog/~4/xhc03YHlU2Q&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 04 May 2012 19:30:27 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: SAS author's tip: Using MLOGIC</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2666</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/jlv3ABM902A/</link>
	<description>This week's SAS author's tip comes from Carol Matthews and Brian Shilling and their book Validating Clinical Trial Data Reporting with SAS.  SAS users have raved about this guide. In her review, Susan Fehrer said &quot;Carol and Brian's book provides a good overview, practical hands-on tips, and many examples of how to perform [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=jlv3ABM902A:A6hq0-DgSSE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=jlv3ABM902A:A6hq0-DgSSE:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/jlv3ABM902A&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 04 May 2012 16:09:35 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: Expand data by using frequencies</title>
	<guid>http://blogs.sas.com/content/iml/?p=5218</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/Ung9hqbdMEY/</link>
	<description>&lt;p&gt;
A reader asked:
&lt;blockquote&gt;
I want to create a vector as follows. Suppose there are two given vectors x=[A B C] and f=[1 2 3].  Here f indicates the frequency vector. I hope to generate a vector c=[A B B C C C]. I am trying to use the REPEAT function in the SAS/IML, language but there is always something wrong. Can you help me?
&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
This is probably a good time to remind everyone about the &lt;a href=&quot;https://communities.sas.com/community/support-communities/sas_iml_and_sas_iml_studio&quot;&gt;SAS/IML Community (formerly known as a Discussion Forum)&lt;/a&gt;. You can post your SAS/IML questions there 24 hours a day. That is always a better plan than making a personal appeal to me, because I receive  dozens of questions like this every month, and there is no way that I can personally reply. There are lots of experienced SAS/IML experts out there, so please use the SAS/IML Community to tap into that knowledge. 
&lt;/p&gt;
&lt;p&gt;
That said, I think the answer to this reader's question makes an interesting example of statistical programming with SAS/IML software. It is trivial to solve this in the DATA step (see the end of this article), but how might you solve it in the SAS/IML language?  If you'd like to try to solve this problem yourself, stop reading here. Spoilers ahead!
&lt;/p&gt;

&lt;h3&gt;Create a new vector that duplicates frequencies&lt;/h3&gt;
&lt;p&gt;
The goal is to write a function that duplicates or &quot;expands&quot; data that have a frequency variable. The important function to use for this task is the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect059.htm&quot;&gt;CUSUM function&lt;/a&gt;, which computes the cumulative frequencies. Let's look at a simple example and apply the CUSUM function to the frequency vector:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;proc iml;
values={A,B,C,E};
freq = {2,1,3,4};
cumfreq = cusum(freq);
print values freq cumfreq;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_expand.png&quot; alt=&quot;&quot; width=&quot;157&quot; height=&quot;140&quot; class=&quot;alignnone size-full wp-image-5260&quot; /&gt;

&lt;p&gt;
As shown in the output, the &lt;tt&gt;cumfreq&lt;/tt&gt; variable contains the indices for the expanded data. The expanded data will be a vector that contains 10 elements. The first data value (A) repeats twice (the &lt;tt&gt;freq&lt;/tt&gt; value), so it repeats until element 2 (the &lt;tt&gt;cumfreq&lt;/tt&gt; value) in the expanded vector. The second category fills element 3. The next category repeats 3 times, so it occupies up through element 6 in the expanded vector. The last category repeats until element 10.  The following DO loop specifies each data value and the indices of the expanded vector that it should occupy:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;print (values[1])[label=&amp;quot;value&amp;quot;] (1:cumFreq[1])[label=&amp;quot;Indices&amp;quot;];
do i = 2 to nrow(values);
   bIdx = 1 + cumFreq[i-1]; /* begin index */
   eIdx = cumFreq[i];       /* end index */
   value = values[i];
   print value (bIdx:eIdx)[label=&amp;quot;Indices&amp;quot;];
end;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_expand2.png&quot; alt=&quot;&quot; width=&quot;167&quot; height=&quot;270&quot; class=&quot;alignnone size-full wp-image-5259&quot; /&gt;


&lt;p&gt;
The output shows that we have all the information we need to allocate a vector of length 10 and fill it with the data values, where the &lt;em&gt;i&lt;/em&gt;th value is repeated &lt;tt&gt;freq[i]&lt;/tt&gt; times. The key, it turns out, is to use the CUSUM function to find the indices that correspond to the each data value.
&lt;/p&gt;

&lt;h3&gt;A module to compute the expanded data&lt;/h3&gt;
&lt;p&gt;
In SAS procedures that support a FREQ statement, the frequency values must be positive integers. If the frequency value is missing or is a nonpositive value, the corresponding data value is excluded from the analysis. It is easy to add that same feature to a module that takes a vector of values and a vector of frequencies and returns a vector that contains the data in expanded form. This is implemented in the following SAS/IML module, which allocates the result vector with the first data value in order to avoid handling the first element outside of the DO loop:


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;start expandFreq(_x, _freq);
   /* Optional: handle nonpositive and fractional frequencies */
   idx = loc(_freq &amp;gt; 0); /* trick: in SAS this also handles missing alues */
   if ncol(idx)=0 then return (.);
   x = _x[idx];
   freq = round( _freq[idx] );
&amp;nbsp;
   /* all frequencies are now positive integers */
   cumfreq = cusum(freq);
&amp;nbsp;
   /* Initialize result with x[1] to get correct char/num type */
   N = nrow(x);
   expand = j(cumfreq[N], 1, x[1]); /* useful trick */
&amp;nbsp;
   do i = 2 to N;
      bIdx = 1 + cumFreq[i-1]; /* begin index */
      eIdx = cumFreq[i];       /* end index */
      expand[bIdx:eIdx] = x[i];/* you could use the REPEAT function here */
   end;
   return ( expand );
finish;
&amp;nbsp;
/* test the module */
values={A,B,C,D,E,F};
freq = {2,1,3,0,4,.}; /* include nonpositive and missing frequencies */
y = expandFreq(values, freq);
print values freq y;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_expand3.png&quot; alt=&quot;&quot; width=&quot;113&quot; height=&quot;301&quot; class=&quot;alignnone size-full wp-image-5258&quot; /&gt;

&lt;/p&gt;&lt;p&gt;
Notice that you don't actually need to use the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect251.htm&quot;&gt;REPEAT function&lt;/a&gt; because SAS/IML is happy to assign a scalar value into a vector. The scalar is automatically repeated as often as needed in order to fill the vector.
&lt;/p&gt;
&lt;h3&gt;A DATA step solution&lt;/h3&gt;
&lt;p&gt;
As indicated at the beginning of this post, the DATA step solution is quite simple: merely use the OUTPUT statement in a loop, as shown in the following example:


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;sas&quot;&gt;&lt;span&gt;data&lt;/span&gt; Orig;
&lt;span&gt;input&lt;/span&gt; &lt;span&gt;x&lt;/span&gt; $ Freq;
datalines;
A &lt;span&gt;2&lt;/span&gt;
B &lt;span&gt;1&lt;/span&gt;
C &lt;span&gt;3&lt;/span&gt;
D &lt;span&gt;0&lt;/span&gt;
E &lt;span&gt;4&lt;/span&gt;
F .
;
&lt;span&gt;run&lt;/span&gt;;
&amp;nbsp;
&lt;span&gt;/* expand original data by frequency variable */&lt;/span&gt;
&lt;span&gt;data&lt;/span&gt; Expand;
&lt;span&gt;keep&lt;/span&gt; &lt;span&gt;x&lt;/span&gt;;
&lt;span&gt;set&lt;/span&gt; Orig;
&lt;span&gt;if&lt;/span&gt; Freq&amp;lt;&lt;span&gt;1&lt;/span&gt; &lt;span&gt;then&lt;/span&gt; &lt;span&gt;delete&lt;/span&gt;;
&lt;span&gt;do&lt;/span&gt; i = &lt;span&gt;1&lt;/span&gt; to &lt;span&gt;int&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;Freq&lt;span&gt;&amp;#41;&lt;/span&gt;;
   &lt;span&gt;output&lt;/span&gt;;
&lt;span&gt;end&lt;/span&gt;;
&lt;span&gt;run&lt;/span&gt;;
&lt;span&gt;proc print&lt;/span&gt; &lt;span&gt;data&lt;/span&gt;=Expand; &lt;span&gt;run&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;/p&gt;&lt;p&gt;
The output data set contains the same data as the &lt;tt&gt;y&lt;/tt&gt; vector in the SAS/IML program.
&lt;/p&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/data-analysis/&quot;&gt;Data Analysis&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/sasprogramming/&quot;&gt;SAS Programming&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/statistical-programming/&quot;&gt;Statistical Programming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=Ung9hqbdMEY:74gIcDNeePU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=Ung9hqbdMEY:74gIcDNeePU:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=Ung9hqbdMEY:74gIcDNeePU:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=Ung9hqbdMEY:74gIcDNeePU:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/Ung9hqbdMEY&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 04 May 2012 09:26:50 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Five reasons to see us at PharmaSUG</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2660</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/QiFcGwYdVt0/</link>
	<description>Between attending presentations and networking, you should make your way to the SAS Bookstore at PharmaSUG. While there are many reasons to add us to your list, here are the top 5: Save money on our books and documentation. We’re offering a special conference discount to PharmaSUG attendees. Talk to a [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=QiFcGwYdVt0:XM0uu3llH6c:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=QiFcGwYdVt0:XM0uu3llH6c:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/QiFcGwYdVt0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 03 May 2012 17:39:40 +0000</pubDate>
</item>
<item>
	<title>The SAS Training Post: Jedi SAS Tricks – Roll Your Own Function</title>
	<guid>http://blogs.sas.com/content/sastraining/?p=2378</guid>
	<link>http://feedproxy.google.com/~r/TheSasTrainingPost/~3/D3NgzQPp7uk/</link>
	<description>A SAS user (who lives in the the US) emailed me a question about SAS functions. He was reading UTC (Coordinated Universal Time) datetime values from server logs, and to make future calculations and comparisons easier, he wanted to transform the value to local datetime.  The INTNX() function worked great, but [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=D3NgzQPp7uk:xQ3-ZWv8HZ0:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=D3NgzQPp7uk:xQ3-ZWv8HZ0:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheSasTrainingPost/~4/D3NgzQPp7uk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Thu, 03 May 2012 12:57:07 +0000</pubDate>
</item>
<item>
	<title>AnnMaria's Blog: Power is not a single number</title>
	<guid>http://www.thejuliagroup.com/blog/?p=2385</guid>
	<link>http://www.thejuliagroup.com/blog/?p=2385</link>
	<description>&lt;p&gt;No, this is not a post about politics or life-hacking, although the same title could apply in either case. I am talking about statistical power. People often ask me what the power of a test is, but the problem is that they are asking the wrong question. Power is not a single number. I understand where the confusion can occur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is power &amp;amp; how do you get it?&lt;/strong&gt;&lt;/p&gt;
&lt;div id=&quot;attachment_2387&quot; class=&quot;wp-caption alignleft&quot;&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/officeguineapigs.jpg&quot;&gt;&lt;img class=&quot;size-full wp-image-2387&quot; title=&quot;officeguineapigs&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/officeguineapigs.jpg&quot; alt=&quot;My two office guinea pigs&quot; width=&quot;380&quot; height=&quot;652&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;The Official Office Guinea Pigs&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;There are two errors people worry about, Type I and Type II. The probability of making a Type I error is set and it is called alpha ( α ) . Alpha is usually set at .05. It is the probability of rejecting a true null hypothesis. Now, what is a null hypothesis? It is a hypothesis of ZERO difference between the means, ZERO relationship between X and Y. A Type I error can occur in the case of ONE number, zero. If the effect is zero and you say it isn&amp;#8217;t, you have made a Type I error.&lt;/p&gt;
&lt;p&gt;A Type II error is the probability of accepting a false null hypothesis. The probability of a Type II error is called beta (β ). A Type II error can occur in an infinite number of cases, for any number other than zero. If the effect isn&amp;#8217;t zero and you say it is, you have made a Type II error. Power = 1 &amp;#8211; β  .Depending on what the actual value of your statistic is, the power will be different.&lt;/p&gt;
&lt;p&gt;Look at it logically. If in an infinite population your experimental group is a million times better than your control group, then, just logically, the probability of you pulling two samples and incorrectly deciding there was no difference is very low. Similarly, if your experimental group performs .01% better than your control group, although the difference is not zero, you can logically conclude that a good percentage of the time you might conclude that there is zero difference, which is, incorrect statistically, although perhaps not for practical purposes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.indiana.edu/~statmath/stat/all/power/power.pdf&quot;&gt;Dr. Park, at the University of Indiana&lt;/a&gt;, has a very nice explanation of hypothesis testing and power analysis. He says, assume that we are testing the hypothesis that the mean is 4 when in actuality the mean is 7.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s just say we are hypothesizing that people feed their office guinea pigs hay an average of four times a month. (I had to do something with the office guinea pigs to make them feel part of the team, so I put them in here.)&lt;/p&gt;
&lt;p&gt;This variable is normally distributed with a standard deviation of 1. (Just a reminder that the standard deviation OF THE MEAN is the standard error.)&lt;/p&gt;
&lt;p&gt;The cut off for rejecting our hypothesis is 5.96 because computing a z score, we get  5.96 &amp;#8211; 4/ 1 = 1.96 since at 1.96, p is not less than .05, p = .05. So, 5.96 is the highest number at which we accept the hypothesis that the mean = 4.&lt;/p&gt;
&lt;p&gt;This hypothesis is, in fact, wrong. People really feed their office guinea pigs hay a mean of 7 times per month.&lt;/p&gt;
&lt;p&gt;We know this because God told us so in a spare moment when he was not busy telling Republicans they needed to become candidates for president.&lt;/p&gt;
&lt;p&gt;Given that the true mean is 7, we can compute the z- score for&lt;/p&gt;
&lt;p&gt;5.96 &amp;#8211; 7 /1 = -1.04&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cs.washington.edu/homes/jrl/normal_cdf.pdf&quot;&gt;We look up 1.04 in a z table because&lt;/a&gt;, although we have a direct line to God, we don&amp;#8217;t have a calculator with statistical functions, and we find that about 15% of the time we&amp;#8217;ll get a value of  1.04 or greater. (14.92% of the time, actually, if you&amp;#8217;re a precision freak).&lt;/p&gt;
&lt;p&gt;So, this tells us IF we hypothesize the mean is 4 but it  really and truly honest-to-God  is 7, and IF the standard error is 1, then our power  is .85 because 15% of the time we&amp;#8217;ll get a number at least as large as 1.04.&lt;/p&gt;
&lt;p&gt;So, our power is .85, right?&lt;/p&gt;
&lt;p&gt;Well, not so right. It is &amp;#8211; IF the standard error is 1 and IF the &amp;#8220;true&amp;#8221; value is 7 and IF we were doing a z-test. But if we knew the true value, what was the point of doing any  tests?&lt;/p&gt;
&lt;p&gt;What if the true value is 6? Then z = 5.96 &amp;#8211; 6 / 1 = .04 .  The percentage of the z-distribution (which is normal) that is greater than .04 is about 50%, so our power is around .5o&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important point number one &amp;#8211; power depends on the true value, and you don&amp;#8217;t know the true value&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignleft size-full wp-image-1484&quot; title=&quot;angels&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2011/06/angels.gif&quot; alt=&quot;&quot; width=&quot;329&quot; height=&quot;128&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is the first important point to keep in mind &amp;#8230;. the power of a test is different based on what the true population value is. But you don&amp;#8217;t really know what it is, since God is too busy worrying if people are having gay sex or eating pork to talk to you about guinea pig cuisine.&lt;/p&gt;
&lt;p&gt;Generally what people do (if &amp;#8220;what people do&amp;#8221; means what I do), is enter a number of possible values into software like PROC POWER. So, I enter 6, 6.5, 6.75 and 7 and find that the values for power are .51, .70, .78 and .85  I can say that the power of the test is at least .85 if the true mean number of office guinea pig hay purchases is 7 per month or higher. That is, when the true figure is at least 7 we would reject the false null hypothesis at least 85% of the time. If it was a lot more than 7, we&amp;#8217;d reject it a lot more than 85%.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important point number two &amp;#8211; power depends on the variability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the example above, I forced the standard error to equal one by assuming my standard deviation was 10 and my sample size was 100. That isn&amp;#8217;t very realistic, but I was just going with the example in his paper. Let&amp;#8217;s say instead that the standard deviation is 1, which is more reasonable, and the sample size is 10. Then my standard error .10 and the power is going to be greater than .999.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important point number three &amp;#8211; power depends on the test statistic&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A z-test is a test where you compare the mean to a constant value.  Generally, you don&amp;#8217;t have a constant value. More likely, you have two groups. Say, we want to know if office guinea pigs get hay as often as home guinea pigs. My hypothesis is that the office guinea pigs will get it seven times a month, because they need more energy  to keep up with their official duties, while the home guinea pigs will only get hay four times a month. I select a total sample of 10 with only 5 in each group, because I want an equal number and for some reason it is difficult to locate people who have office guinea pigs . The standard deviation of number of times of hay per month is  still 1. When I compute the power of this test, it was .985.&lt;/p&gt;
&lt;p&gt;SO &amp;#8230;. even if you go with the standard .05 level of significance (level of significance ALSO affects power) and the standard two-tailed tests (whether you have a one or two-tailed test ALSO affects power) and you don&amp;#8217;t have to bother about correlations between groups (the correlation between groups in a paired t-test ALSO affects power) you STILL can have a whole bunch of numbers that MAY be the power of the test depending on what the test statistic, variability and hypothesized value are.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The one thing that affects power people usually ask about is sample size&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes, sample size also affects the power of a test. So, if I only had 4 guinea pigs per group, my power would be .939. If I had 10 guinea pigs in each group, it would be above .999&lt;/p&gt;
&lt;p&gt;However, if you ask me to tell you how many people you need in your sample to have a power of .80, you&amp;#8217;re asking the wrong question. The answer depends on how large of an effect size (in these examples difference between means), how much variability, the specific statistical test you are doing and other factors like whether it is a one or two-tailed tests and correlations between your groups.&lt;/p&gt;
&lt;p&gt;The best answer you are going to get from me is that if you have 128 people total in your sample you will have power of AT LEAST .80 IF you are doing an independent t-test if there is AT LEAST a half-standard deviation difference between the two groups, AND you are doing a two-tailed AND your null hypothesis is that there is zero difference between the groups. However, if there is smaller difference than that it will be less. Also, if you are doing a different test, say, a logistic regression, power calculation is more complicated.&lt;/p&gt;
&lt;p&gt;But I know that you are going to nod knowingly, turn around and walk out the door saying,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;128. Got it. Thanks!&amp;#8221;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
	<pubDate>Thu, 03 May 2012 04:13:25 +0000</pubDate>
</item>
<item>
	<title>The SAS Training Post: ESTIMATE Statements - the final installment</title>
	<guid>http://blogs.sas.com/content/sastraining/?p=2427</guid>
	<link>http://feedproxy.google.com/~r/TheSasTrainingPost/~3/2REmVEOrYxk/</link>
	<description>FINALLY…the simplest ESTIMATE statements to write are for continuous variables not involved in interactions or higher order terms. Consider a data set containing the 2004 SAT scores for each of the 50 states. The file includes the combined math and verbal SAT scores (TOTAL), the state (STATE) and the percent [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=2REmVEOrYxk:AP047-qf8aQ:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=2REmVEOrYxk:AP047-qf8aQ:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheSasTrainingPost/~4/2REmVEOrYxk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 02 May 2012 17:56:35 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: DS2. Data Step Evolved? #sasgf12</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-6520272652062027956</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/Oac7g3_KF3k/note-ds2-data-step-evolved-sasgf12.html</link>
	<description>One of the other &quot;futures&quot; sessions I attended at &lt;a href=&quot;http://support.sas.com/events/sasglobalforum/2012/&quot;&gt;SAS Global Forum&lt;/a&gt; was &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/397-2012.pdf&quot;&gt;The New SAS Programming Language: DS2&lt;/a&gt; with SAS's Jason Secosky. Jason was at pains to point out that DS2 is not intended as a replacement for the good old DATA step. DS2 is an alternative to DATA step and has more of a focus than the generalistic DATA step.&lt;br /&gt;
&lt;br /&gt;
Generally available in 9.4, PROC DS2 is currently &lt;a href=&quot;http://support.sas.com/documentation/solutions/ds2/GettingStartedWithDS2.pdf&quot;&gt;available in SAS V9.3&lt;/a&gt; as an experimental technology. Its focus is on high performance for data manipulation and data analysis. It incorporates threading.&lt;br /&gt;
&lt;br /&gt;
DATA steps are in control of their data; they specify the source of their input data, and they specify the location of their output data. In contrast, DS2 is simply a node in a flow;&amp;nbsp;DS2 uses data streams rather than specific data objects. So, DS2 is not a DATA step replacement, it's new technology.&lt;br /&gt;
&lt;br /&gt;
DS2's syntax is similar in parts to DATA step, with DATA and SET statements, if/then/else statements, expressions and functions. However, DS2 adds structure to code. Some of its syntax will be familiar to SAS/AF SCL coders; it includes methods (including init, term, and run). It has lots more types of variables when compared with DATA step, e.g. integer and varchar. DS2 integrates with other languages (such as R, C, C+ +, IML, and SAS fcmp functions) through the concept of a package. Interestingly, we'll be able to edit our DS2 code in the Eclipse editor, wherein a debugger will be included.&lt;br /&gt;
&lt;br /&gt;
In essence, DS2 is the means of taking code to data (ref: big data) and promises linear scalability.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
You are very welcome to share this email with your colleagues. However, if you do so, please recommend that they subsequently create their own subscription to NOTE: by linking to http://feedburner.google.com/fb/a/mailverify?uri=NoteTheBlogOfRtsleu-DevelopmentsInSas&amp;amp;loc=en_US. Thank you for your continued support of NOTE:.&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-6520272652062027956?l=www.notecolon.info&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/Oac7g3_KF3k&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 02 May 2012 11:00:05 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: The DIF function: Compute lagged differences and finite differences</title>
	<guid>http://blogs.sas.com/content/iml/?p=5153</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/QAmkzmdoLk4/</link>
	<description>&lt;p&gt;
To a statistician, the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect069.htm&quot;&gt;DIF function&lt;/a&gt; (which was introduced in SAS/IML 9.22) is useful for time series analysis. To a numerical analyst and a statistical programmer, the function has many other uses, including computing finite differences.
&lt;/p&gt;

&lt;p&gt;
The DIF function computes the difference between the original vector and a shifted version of that vector. In terms of the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect172.htm&quot;&gt;LAG function&lt;/a&gt;,  &lt;tt&gt;DIF(x,k) = x - LAG(x,k)&lt;/tt&gt; for any value of the lag parameter, &lt;em&gt;k&lt;/em&gt;.
I blogged about &lt;a href=&quot;http://blogs.sas.com/content/iml/2012/04/30/the-lag-function/&quot;&gt;the usefulness of the LAG function&lt;/a&gt; earlier this week.
&lt;/p&gt;

&lt;h3&gt;Using the DIF function to compute forward and backward differences&lt;/h3&gt;
&lt;p&gt;
For a function that is given by a formula, you can use the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect204.htm&quot;&gt;NLPFDD subroutine&lt;/a&gt; to compute finite difference derivatives. However, sometimes a function is known only at a finite set of points. In that case, you have a choice: you can either model the function by using regression techniques or you can assume that the function is piecewise linear.
&lt;/p&gt;&lt;p&gt;
Some curves really are piecewise linear. For example, an &lt;a href=&quot;http://blogs.sas.com/content/iml/2011/06/03/a-statistical-application-of-numerical-integration-the-area-under-an-roc-curve/&quot;&gt;ROC curve&lt;/a&gt; is piecewise linear, and
you can compute the exact derivatives by using a forward or backward difference scheme. You can also compute an exact area under the piecewise linear function by using  &lt;a href=&quot;http://blogs.sas.com/content/iml/2011/06/01/the-trapezoidal-rule-of-integration/&quot;&gt;
the trapezoidal rule of integration.&lt;/a&gt;  
&lt;/p&gt;
&lt;p&gt;
The DIF function makes it easy to compute lagged differences (finite differences) in a sequence of values. As an example, the derivative of a function can be approximated by the backward difference formula: &lt;em&gt;f'(x)&lt;/em&gt; &amp;#8776;
&lt;em&gt;(f(x)-f(x-h))/h&lt;/em&gt; 
for small values of &lt;em&gt;h&lt;/em&gt;. If you know the values of &lt;em&gt;f&lt;/em&gt; at a discrete set of points 
&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt; &amp;lt; 
&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt; &amp;lt; ... &amp;lt;
&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;n&lt;/sub&gt;,
then you can use the DIF function to evaluate the backward difference because the expression &lt;em&gt;f(x&lt;sub&gt;i&lt;/sub&gt;-h)&lt;/em&gt; is the lagged term &lt;em&gt;f(x&lt;sub&gt;i-1&lt;/sub&gt;)&lt;/em&gt;. For example, the following SAS/IML program computes a sequence of evenly spaced &lt;em&gt;x&lt;/em&gt; values and evaluates the sine function at these points. The points of the &lt;tt&gt;backDiff&lt;/tt&gt; vector approximate the derivative of the sine at each value of &lt;em&gt;x&lt;/em&gt;:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;proc iml;
h = 0.1;
x = T( do(0, 6.28, h) );
y = sin(x);
backDiff =  dif(y, 1) / h;     /* f'(x) ~ (f(x)-f(x-h))/h */&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;p&gt;
When the DIF function is called with a single argument, a lag of 1 is assumed, so you can also write &lt;tt&gt;backDiff =  dif(y)/h&lt;/tt&gt;.
&lt;/p&gt;&lt;p&gt;
We know from calculus that the exact derivative of the sine function is the cosine. The following function computes the exact derivative at each value of &lt;em&gt;x&lt;/em&gt; and compares it with the finite difference approximation:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;deriv = cos(x);
maxBDiff = max(abs(deriv-backDiff)); /* find maximum difference */
print maxBDiff;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_dif.png&quot; alt=&quot;&quot; width=&quot;75&quot; height=&quot;58&quot; class=&quot;alignnone size-full wp-image-5207&quot; /&gt;
&lt;p&gt;

The following plot shows the exact derivative and the backward difference approximation at each point of &lt;em&gt;x&lt;/em&gt;:
&lt;/p&gt;
&lt;a href=&quot;http://blogs.sas.com/content/iml/files/2012/05/dif.png&quot;&gt;&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/dif.png&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; class=&quot;alignnone size-full wp-image-5209&quot; /&gt;&lt;/a&gt;



&lt;p&gt;
The finite difference approximations are in close agreement with the exact values.
You can also plot the forward difference approximation, which is similar. The forward difference requires using a shift value of -1. When you work through the formula, you find that &lt;tt&gt;forwardDiff =  -dif(y, -1) / h&lt;/tt&gt;.
&lt;/p&gt;

&lt;h3&gt;Finite differences for irregularly spaced data&lt;/h3&gt;
&lt;p&gt;
The DIF function also &quot;works&quot; on irregularly spaced data. For data that are not evenly spaced, the &lt;em&gt;h&lt;/em&gt; parameter, which is the difference between adjacent &lt;em&gt;x&lt;/em&gt; values, is no longer constant. You can use the DIF function to compute the distance between &lt;em&gt;x&lt;/em&gt; values, and then compute the slopes as shown in the following statements:


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;/* irregular spacing and no formula */
x = {0.0, 0.1, 0.2, 0.4, 0.5, 0.8, 1.0};
y = {0.3, 0.6, 0.7, 0.7, 0.9, 1.0, 1.0};
dx = dif(x);  /* difference for adjacent x values (lag=1) */
dy = dif(y);  /* difference for adjacent y values (lag=1) */
slopes = dy/dx;
print dx dy slopes;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_dif2.png&quot; alt=&quot;&quot; width=&quot;135&quot; height=&quot;222&quot; class=&quot;alignnone size-full wp-image-5208&quot; /&gt;

&lt;/p&gt;&lt;p&gt;
You can also use the DIF and LAG function to implement integration schemes. For example, in my article on 
&lt;a href=&quot;http://blogs.sas.com/content/iml/2011/06/01/the-trapezoidal-rule-of-integration/&quot;&gt;the trapezoidal rule of integration&lt;/a&gt;, I could have implemented the trapezoidal rule by using LAG and DIF instead of using indexes to form the lag of the data vectors manually.
&lt;/p&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/getting-started/&quot;&gt;Getting Started&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/numerical-analysis/&quot;&gt;Numerical Analysis&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/statistical-programming/&quot;&gt;Statistical Programming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=QAmkzmdoLk4:NKY3R5OYEBw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=QAmkzmdoLk4:NKY3R5OYEBw:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=QAmkzmdoLk4:NKY3R5OYEBw:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=QAmkzmdoLk4:NKY3R5OYEBw:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/QAmkzmdoLk4&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 02 May 2012 09:24:52 +0000</pubDate>
</item>
<item>
	<title>AnnMaria's Blog: Text Miner = Coolness</title>
	<guid>http://www.thejuliagroup.com/blog/?p=2377</guid>
	<link>http://www.thejuliagroup.com/blog/?p=2377</link>
	<description>&lt;p&gt;In the past, when I had to do any type of parsing of text, I wrote my own code with a zillion SUBSTR functions and IF statements and it did the job but it was *so-o-o ugly and painful that I never even considered including text mining in any courses I taught.&lt;/p&gt;
&lt;p&gt;I looked into SAS Enterprise Miner years ago but the commercial version costs (and this is approximate) $1,278,544,899,711,315  and your left kidney.&lt;/p&gt;
&lt;p&gt;The SAS On-Demand version sucked. You know how some programs you can get a cup of coffee while waiting for them to run? With the original SAS On-Demand for Enterprise Miner you could fly to Columbia, work as a day laborer to earn the money to buy land, start your own plantation, breed a strain of genetically superior coffee beans and skip the country on the last plane out  just before the latest government coup nationalizes your business &amp;#8211; and your results STILL wouldn&amp;#8217;t be available when you got back.&lt;/p&gt;
&lt;p&gt;Having had such good luck with SAS On-Demand for Enterprise Guide last semester, I thought I&amp;#8217;d give Enterprise Miner another look.&lt;/p&gt;
&lt;p&gt;Oh.My.God.&lt;/p&gt;
&lt;p&gt;Last year, The Spoiled One was in the living room with her boring parents, complaining they were watching The Daily Show with boring news when it turned out that Justin Bieber was the guest.&lt;/p&gt;
&lt;p&gt;She must have felt like this.&lt;/p&gt;
&lt;p&gt;The latest version is unbelievably faster. I cannot tell you if it is better because it ran so slow in the past it was impossible to tell. It is easy to use.  Let me give an example.&lt;/p&gt;
&lt;p&gt;First, you register with SAS On-Demand and register a course for use with Enterprise Miner. This is really easy.&lt;/p&gt;
&lt;p&gt;Second, you start Enterprise Miner which requires nothing more than clicking on the Get Software link on your log in page.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/login.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-2378&quot; title=&quot;login&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/login.png&quot; alt=&quot;Login page. Click on Get Software&quot; width=&quot;964&quot; height=&quot;607&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next, create a project. Just go to FILE &amp;gt; NEW &amp;gt; Project and click next a lot. A long the way you give it a name. It&amp;#8217;s pretty obvious.&lt;/p&gt;
&lt;p&gt;It may not be obvious that you need to have a data source available and create a diagram. Again, it&amp;#8217;s pretty easy to figure out, though.&lt;/p&gt;
&lt;p&gt;Creating a data source &amp;#8211; go to FILE &amp;gt; NEW &amp;gt; DATA SOURCE&lt;/p&gt;
&lt;p&gt;a window pops up and the default is SAS TABLE, which is what you want if your data is in a SAS dataset (they now call them tables. I blame the damn SQL people.). Click Next&lt;/p&gt;
&lt;p&gt;In the next window, you browse to where your data are. Because I am just testing this for use in a class, I used the abstract data set in the Sampsio library.&lt;/p&gt;
&lt;p&gt;So, you have a project, a blank diagram and a data source. Now what?&lt;/p&gt;
&lt;p&gt;Text parsing:&lt;br /&gt;
1. Drag the icon under data sources on to your diagram&lt;br /&gt;
2. Click on the Text Mining Tab&lt;br /&gt;
3. Click on the Text Parsing tab (hovering over each tab with the mouse will give you its name) and drag it to the diagram&lt;br /&gt;
4. Click on the little grey stem sticking out of the end of your data source and drag it to the text parsing box.&lt;/p&gt;
&lt;p&gt;5. Now, right- click on the Text Parsing box and from the drop-down menu, select RUN&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/textparsing.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-2379&quot; title=&quot;textparsing&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/textparsing.png&quot; alt=&quot;First 4 steps in text parsing illustrated&quot; width=&quot;732&quot; height=&quot;316&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After a bit, it will come up with a window that has two choices, OK and Results. Click on Results. The most interesting bit in the results, I think, is the table of frequency for each word. You can see which words are most common in your documents.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/stoplist.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-2380&quot; title=&quot;stoplist&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/stoplist.png&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;437&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STOP WORDS AND OTHER OPTIONS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is just the beginning, of course. As you can imagine, if you had to actually write a program to read every word separately, that would take a bit of time. Far more time would be to have it ignore words that are useless, like, &amp;#8220;the&amp;#8221;, &amp;#8220;that&amp;#8221;, &amp;#8220;there&amp;#8221;. These are called &lt;strong&gt;stop words&lt;/strong&gt;. Enterprise Miner has a stop list and you can add or delete words from it.&lt;/p&gt;
&lt;p&gt;Click on the thing that looks like a page to add a row and type in another stop word. For example, these abstracts come from the SAS Global Forum proceedings so they probably all have some words like data and SAS that occur in every one of them, so in this case, that is pretty useless as far as analyzing the documents. You can add those to your stop list.&lt;/p&gt;
&lt;p&gt;If there is a word you want to keep, you can remove it from the stop list by selecting it and clicking that X at the top (right next to the thing that looks like a new page). You&amp;#8217;ll be asked if you are sure you want to delete that row.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;How do you get the stop row list, you may ask, quivering with excitement.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/Textparsingoptions.png&quot;&gt;&lt;br /&gt;
&lt;img class=&quot;alignleft size-full wp-image-2381&quot; title=&quot;Textparsingoptions&quot; src=&quot;http://www.thejuliagroup.com/blog/wp-content/uploads/2012/05/Textparsingoptions.png&quot; alt=&quot;Text parsing options window&quot; width=&quot;297&quot; height=&quot;458&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
If you have clicked on the Text Parsing box, making it active, you&amp;#8217;ll see in the left window pane a number of options.&lt;/p&gt;
&lt;p&gt;These include:&lt;/p&gt;
&lt;p&gt;the language to use,&lt;/p&gt;
&lt;p&gt;a list of multi-word terms, everything from &amp;#8220;a lot&amp;#8221; to &amp;#8220;keep in mind&amp;#8221; to &amp;#8220;zero in&amp;#8221;,&lt;/p&gt;
&lt;p&gt;parts of speech to ignore, like adjectives, and, of course,&lt;/p&gt;
&lt;p&gt;the stop list.&lt;/p&gt;
&lt;p&gt;To modify any of these, just click on the three dots next to it and a window will pop up, like the one shown above for the stop list.&lt;/p&gt;
&lt;p&gt;If you haven&amp;#8217;t actually had to do analyze text data before, you have NO IDEA how amazingly awesomely cool this all is.&lt;/p&gt;
&lt;p&gt;When I was in graduate school, we would actually print out multiple copies of the documents, cut the pages into paragraphs and sort them into categories.&lt;/p&gt;
&lt;p&gt;More recently, this is why I started using Ruby because it was much easier to parse text than using SAS. There were some cheaper and open source solutions that I looked at but their documentation was non-existent, the interfaces were clear as mud.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Bad and Good News &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Speaking of unclear interfaces &amp;#8230; I&amp;#8217;m not sure I would have guessed that the page with the corner folded meant &amp;#8220;add new row&amp;#8221;.  Also, there is a LOT of stuff on the Enterprise Miner screen. You have all of these different panes in the window and the options in them are completely different depending on whether you have clicked on the text mining tab, the text parsing box or something else. I&amp;#8217;ve read a couple of data mining books, one specifically on Enterprise Miner, and they still were very sparse, particularly in their treatment of text mining, which is what I was most interested in.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s the bad news. The good news is that when I was at SAS Global Forum, I picked up a copy of Practical Text Mining. I almost didn&amp;#8217;t buy it because it&amp;#8217;s over 1,000 pages and my suitcase was already pretty full, which meant I&amp;#8217;d have to lug it through the airport. Even worse, it did not have an electronic version, which is tough for me because even with contacts and glasses worn OVER my contacts, I still have difficulty reading some of the screen shots in it. (I expect if I had normal eyesight, I&amp;#8217;d be fine.)&lt;/p&gt;
&lt;p&gt;All that being said, this book is really useful. I know I got a discount at the conference, but still, it was about $70, which for a textbook like this is super-cheap. A thousand pages sounds like a lot, but that&amp;#8217;s because it starts with the very basics and is a bit redundant. That&amp;#8217;s not so terrible, though because that makes it easy to read. I was laying in bed sick this morning and read the first 120 pages in about two hours.&lt;/p&gt;
&lt;p&gt;This is a godsend to anyone doing a qualitative dissertation. The real tragedy is that a lot of people in areas that do qualitative research &amp;#8211; education, psychology, nursing, social work, to name a few &amp;#8211; probably won&amp;#8217;t even be aware that Enterprise Miner exists, much less that they can get it for free to use in teaching their courses.&lt;/p&gt;
&lt;p&gt;Seriously, people, this is a huge opportunity for you to teach your students about text mining and it&amp;#8217;s really not that hard.&lt;/p&gt;</description>
	<pubDate>Wed, 02 May 2012 08:15:19 +0000</pubDate>
</item>
<item>
	<title>The SAS Dummy: The top gotchas when moving to 64-bit SAS for Windows</title>
	<guid>http://blogs.sas.com/content/sasdummy/?p=2076</guid>
	<link>http://feedproxy.google.com/~r/ASasBlogForTheRestOfUs/~3/6uXUUWeUUwA/</link>
	<description>&lt;p&gt;Many SAS customers are quickly adopting 64-bit versions of Microsoft Windows, and they are pleased-as-punch when they find a 64-bit version of SAS to run on it. They waste no time in deploying the new version, only to find that a few things don't work quite the same as they did with the 32-bit version. This post describes the top snags that end users encounter, and how to work around them.&lt;/p&gt;
&lt;h3&gt;Gotcha #1: Importing Microsoft Excel files&lt;/h3&gt;
&lt;p&gt;Imagine you have a program that looks like this:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;sas&quot;&gt;&lt;span&gt;proc import&lt;/span&gt; out=work.class
 datafile=&lt;span&gt;&amp;quot;c:&lt;span&gt;\t&lt;/span&gt;emp&lt;span&gt;\c&lt;/span&gt;lass.xls&amp;quot;&lt;/span&gt;
 DBMS = EXCEL;
&lt;span&gt;run&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;On 64-bit SAS for Windows, you might be surprised to encounter this error:&lt;br /&gt;
&lt;pre&gt;ERROR: Connect: Class not registered
ERROR: Error in the LIBNAME statement
Connection Failed.  See log for details.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE IMPORT used (Total process time):
  real time           0.11 seconds
  cpu time            0.04 seconds&lt;/pre&gt;&lt;br /&gt;
This isn't limited to importing Excel files. It can happen when you use PROC EXPORT to export Excel files, or use DBMS=ACCESS for Microsoft Access database files, or when you try to use LIBNAME EXCEL to reference a local Excel spreadsheet as data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Cause:&lt;/strong&gt;&lt;br /&gt;
Your 64-bit SAS process cannot use the built-in data providers for Microsoft Excel or Microsoft Access, which are usually 32-bit modules. In a previous blog post, &lt;a title=&quot;About 32-bit versus 64-bit&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2012/02/11/export-excel-methods/&quot;&gt;I've provided a bit of explanation about this limitation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt;&lt;br /&gt;
Use DBMS=EXCELCS for Excel files, or DBMS=ACCESSCS for Microsoft Access. For LIBNAME access, try LIBNAME PCFILES. These approaches use the PC Files Server, which is a separate small application that is provided with SAS/ACCESS to PC Files. Note that &lt;a title=&quot;Some notes about installing/using PC Files Server&quot; href=&quot;http://support.sas.com/kb/43/802.html&quot;&gt;you may need to go back and install this application&lt;/a&gt;, as it might not have been placed in your installation automatically. However, you can use the Autostart feature to skip having to configure it as a service, and thus minimize the changes to your SAS programs.&lt;/p&gt;
&lt;p&gt;Alternatively, you can try &lt;a title=&quot;The easy way to read Excel from SAS if you have 9.3&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2012/01/25/export-to-excel-got-easier/&quot;&gt;DBMS=XLSX to remove the data providers from the equation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: There are a few feature differences between the EXCELCS and EXCEL options.  &lt;a href=&quot;http://support.sas.com/kb/41/060.html&quot; title=&quot;GETNAMES and MIXED not supported in EXCELCS&quot;&gt;Read this SAS note to determine&lt;/a&gt; whether these differences will affect your work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Caution:&lt;/strong&gt;&lt;br /&gt;
I've heard of a few customers who decide to workaround this limitation by installing the 64-bit version of Microsoft Office (and thus using the 64-bit data providers). That works, but &lt;a title=&quot;Be deliberate about how you deploy 64-bit client apps&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/03/64-bit-versus-32-bit-apps/&quot;&gt;it might introduce other incompatibilities with how you use your Microsoft Office applications&lt;/a&gt;. Microsoft recommends the 64-bit version of Office in only a few circumstances; consider the implications carefully before you head down this road.&lt;/p&gt;
&lt;h3&gt;Gotcha #2: Incompatible FORMATS catalog&lt;/h3&gt;
&lt;p&gt;Suppose that you have a library of user-defined formats that you once created by using PROC FORMAT. User-defined formats are stored in SAS catalogs, which are a sort of SAS-specific file system structure that SAS can access during your session.&lt;/p&gt;
&lt;p&gt;If you created and used these user-defined formats with 32-bit SAS, you'll see this message when you try to use them with 64-bit SAS:&lt;br /&gt;
&lt;pre&gt;15         libname library &amp;quot;c:\datasources\32bit&amp;quot;;
NOTE: Libref LIBRARY was successfully assigned as follows:
Engine:        V9
Physical Name: c:\datasources\32bit
16         proc print data=sashelp.air;
17         format date benefit.;
ERROR: File LIBRARY.FORMATS.CATALOG was created for a different
 operating system.
18         run;&lt;/pre&gt;&lt;br /&gt;
&lt;strong&gt;The Cause:&lt;/strong&gt;&lt;br /&gt;
For all intents and purposes, the move from 32-bit SAS for Windows to 64-bit SAS for Windows is like a platform change, and SAS catalogs are not portable across platforms. Even though you've just moved from one version of Windows to another, from a SAS perspective these files &lt;em&gt;are&lt;/em&gt; different, with different internal structures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt;&lt;br /&gt;
SAS provides the utility procedures CPORT and CIMPORT to allow you to transfer catalog content across different operating environments, and you can certainly take that approach for this scenario.&lt;/p&gt;
&lt;p&gt;If you have a mixed environment on your team where some people have 32-bit SAS and others have 64-bit SAS, it might be easier to decompose the format definitions down to data sets (by using PROC FORMAT and the CTLOUT option). You can then easily recreate the formats &quot;on the fly&quot; by using PROC FORMAT and the CTLIN option.&lt;/p&gt;
&lt;p&gt;This works well because SAS data sets are compatible between the 32-bit and 64-bit versions of SAS...mostly. That brings us to the last &quot;gotcha&quot;.&lt;/p&gt;
&lt;h3&gt;Gotcha #3: Different data set encoding triggers CEDA&lt;/h3&gt;
&lt;p&gt;If you use SAS data sets that were created by a 32-bit version of SAS, you can read them without modification in 64-bit SAS. But you might see a message like this:&lt;br /&gt;
&lt;pre&gt;NOTE: Data file TEST.HMEQ.DATA is in a format that is native to another host,
or the file encoding does not match the session encoding.
Cross Environment Data Access will be used, which might require additional
CPU resources and might reduce performance.&lt;/pre&gt;&lt;br /&gt;
I've &lt;a title=&quot;CEDA and how to check it&quot; href=&quot;http://blogs.sas.com/content/sasdummy/2010/05/24/finding-the-foreigners-in-your-sas-environment/&quot;&gt;written about cross-environment data access before&lt;/a&gt;, and how it's a bit of SAS magic that helps with cross-platform compatibility. However, you might not have expected it to kick in when you upgraded to 64-bit SAS on Windows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Cause:&lt;/strong&gt;&lt;br /&gt;
SAS data set files are written with an encoding that is specific to the SAS operating environment. In 32-bit SAS on Windows, the encoding is WINDOWS_32. On 64-bit SAS, it's WINDOWS_64. When the data set encoding differs from the native SAS session encoding, CEDA kicks in.&lt;/p&gt;
&lt;p&gt;The good news is that in SAS 9.3, the&lt;a title=&quot;hooray! data sets are compatible on Windows&quot; href=&quot;http://support.sas.com/kb/38/379.html&quot;&gt; SAS developers &quot;taught&quot; SAS for Windows to bypass the CEDA layer&lt;/a&gt; when the only encoding difference is WINDOWS_32 versus WINDOWS_64.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt;&lt;br /&gt;
You don't have to do anything about this issue unless you want to update the data sets. And if you have SAS 9.3, you probably won't see this message at all...at least not when the data originates from 32-bit SAS for Windows.&lt;/p&gt;
&lt;p&gt;If you decide to convert entire data set libraries to the new native encoding, you can achieve this &lt;a title=&quot;all about migration&quot; href=&quot;http://support.sas.com/rnd/migration/procmigrate/&quot;&gt;by using PROC MIGRATE&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Parting bits&lt;/h3&gt;
&lt;p&gt;I'll finish this post with just a few general points to guide you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;64-bit Windows is pervasive, and is a Good Thing.  The 64-bit OS, combined with better hardware and more memory, can help to deliver more throughput.&lt;/li&gt;
&lt;li&gt;In the not-so-distant future, all apps will eventually become native 64-bit.  The incompatibility hiccups of today will be tomorrow's faint memory.&lt;/li&gt;
&lt;li&gt;But &lt;em&gt;for today&lt;/em&gt;, don’t automatically deploy 64-bit app &quot;just because&quot; such a version exists.  Make it a deliberate business decision to consider.&lt;/li&gt;
&lt;li&gt;And if you do go with the 64-bit app, budget the time/resources for 64-bit conversion, if necessary&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Related posts about 64-bit topics&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/19/myths-about-64-bit-computing-on-windows/&quot; title=&quot;is it all that it's cracked up to be?&quot;&gt;Myths about 64-bit computing on Windows&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2012/04/03/64-bit-versus-32-bit-apps/&quot; title=&quot;does it make a big impact on client apps? not really&quot;&gt;Are 64-bit &lt;strong&gt;client&lt;/strong&gt; applications twice as good as 32-bit applications?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2012/02/11/export-excel-methods/&quot; title=&quot;Touching on the 64-bit compatibility issue&quot;&gt;How do I export from SAS to Excel files: Let me count the ways&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogs.sas.com/content/sasdummy/2010/09/15/should-you-care-about-64-bit-applications/&quot; title=&quot;well? should you? this post from *way* back.&quot;&gt;Should you care about 64-bit applications?&lt;/a&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/64-bit/&quot;&gt;64-bit&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/tag/excel/&quot;&gt;excel&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=6uXUUWeUUwA:jrYB1v_isTY:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=6uXUUWeUUwA:jrYB1v_isTY:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=6uXUUWeUUwA:jrYB1v_isTY:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?i=6uXUUWeUUwA:jrYB1v_isTY:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?a=6uXUUWeUUwA:jrYB1v_isTY:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/ASasBlogForTheRestOfUs?i=6uXUUWeUUwA:jrYB1v_isTY:V_sGLiPBpWU&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/ASasBlogForTheRestOfUs/~4/6uXUUWeUUwA&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 01 May 2012 17:22:18 +0000</pubDate>
</item>
<item>
	<title>SAS Analysis: 10 keywords taken out from SAS Global Forum 2012</title>
	<guid>tag:blogger.com,1999:blog-3256159328630041416.post-5844992115284993505</guid>
	<link>http://feedproxy.google.com/~r/SasAnalysis/~3/31A7GVZYaMM/10-keywords-taken-out-from-sas-global.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-8bapCq6LZFU/T5lnDXiaiLI/AAAAAAAABDw/qZNIy9WVU5Y/s1600/Presentation1.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://3.bp.blogspot.com/-8bapCq6LZFU/T5lnDXiaiLI/AAAAAAAABDw/qZNIy9WVU5Y/s400/Presentation1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;1. In-memory&lt;/b&gt;&lt;br /&gt;
SAS is famous for hitting hard disk at every operation, which is a proved strategy to save memory. &amp;nbsp;To speed up the processing of ‘Big Data’, SAS at the server side will aggregate memories, load data into memory and then deal with data there, which is 1000 times faster than the hard disk based operation.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Hadoop&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.informationweek.com/news/software/bi/231903100&quot;&gt;Informationweek described&amp;nbsp;&lt;/a&gt;that Dr. Goodnight, CEO of SAS, loathes Hadoop, the distributed open source platform. However, this time SAS presented its DI Studio and SAS/ACCESS interface, which now allows data access by Hive and Pig. It looks like a challenge for SAS to run its statistical procedures on HDFS.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Web application&lt;/b&gt;&lt;br /&gt;
SAS’s applications obviously start to move toward web, like &lt;a href=&quot;http://www.sas.com/technologies/bi/visual-analytics.html&quot;&gt;SAS Visual Analytics&lt;/a&gt;, which also fits various mobile devices. There is a way to distinguish a desktop application and a web application in SAS: the former’s default background color is white and the latter is black.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. High performance procedures&lt;/b&gt;&lt;br /&gt;
SAS is vigorously developing the procedures with HP as prefix, mostly for the servers. Currently 10-20 procedures in SAS/BASE and SAS/STAT can find their counterpart, such as PROC HPSummary and PROC HPLogistic. Those procedures can also run locally but won't not improve the efficiency significantly.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. JMP&lt;/b&gt;&lt;br /&gt;
JMP remains as a lean desktop analysis package while SAS evolves toward gigantic enterprise solution platforms. One interesting thing -- you can always find the motion chart (which JMP can do and SAS can’t) and &lt;a href=&quot;http://en.wikipedia.org/wiki/John_Sall&quot;&gt;John Sall &lt;/a&gt;at the demo area.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. SAS 12.1?&lt;/b&gt;&lt;br /&gt;
&lt;strike&gt;Next release of SAS is not 9.4, but 12.1. &lt;/strike&gt;SAS version 9, including 9.1, 9.2 and 9.3, dwells for almost a decade. Thus, the version update from 9.3 to 12.1 is quite a great leap forward.&lt;br /&gt;
&lt;b&gt;Correction&lt;/b&gt; - thanks to &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/&quot;&gt;Chris Hemedinger&lt;/a&gt;, 'the new release numbering applies only to the analytical products (STAT, ETS, and so on)'.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7. Data Step 2?&lt;/b&gt;&lt;br /&gt;
To support data management along with the high performance procedures at the servers, a language called DS2 is under development. &lt;strike&gt;It is a strong typing language more like Java or C++ more than Data Step. However, SAS has a macro which can transform Data Step codes to Data Step 2.&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to the corrections by&lt;b&gt; Jason Secosky&lt;/b&gt;, who is the development manager for DS2 --&lt;br /&gt;
&quot;While DS2 is based on the DATA step, its name is just &quot;DS2&quot; not &quot;DATA step 2&quot;. DS2 is statically typed, not strongly typed. Ok, ok, there is no implicit type conversion between some types, like double and timestamp, yet there are functions to explicitly convert these values.&lt;br /&gt;
And, there is a PROC that can be used to translate DATA steps generated by SAS Enterprise Miner to DS2. The PROC isn't intended to convert *any* DATA step to DS2.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;8. In-database&lt;/b&gt;&lt;br /&gt;
SAS’s in-database technology now supports all database systems beyond Teradata and Greenplum. To avoid compilation error, it is better to apply ANSI SQL functions instead of SAS’s own function. As for me, it is still not very clear how SAS passes its statistical procedures into the relation database systems.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;9. Risk management&lt;/b&gt;&lt;br /&gt;
SAS’s risk management platform is quite mature and implemented the latest procedures like PROC COPULA. It seems that the end users have to own Bloomberg or other vendor’s license to update the market data.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;10. Statistical graph&lt;/b&gt;&lt;br /&gt;
More SAS’s procedures and solution plans integrated layer-based statistical graph technology to visualize results. Still SAS’s Windowing Environment still doesn’t support the syntax highlighting for &amp;nbsp;Graph Template Language and the SG procedures, since it always shows red fonts warning syntax errors.&lt;br /&gt;
&lt;div&gt;&lt;br /&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/3256159328630041416-5844992115284993505?l=www.sasanalysis.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SasAnalysis/~4/31A7GVZYaMM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 01 May 2012 17:02:42 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: Four reasons to use SAS/GRAPH</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2644</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/gV1tUX9gj3Q/</link>
	<description>Robert Allison's SAS/GRAPH: Beyond the Basics collects examples that demonstrate a variety of techniques you can use to create custom graphs using SAS/GRAPH software. To celebrate the book’s publication, we asked Robert to tell us more about why he loves SAS/GRAPH. Here’s what he had to say: A graph is [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=gV1tUX9gj3Q:G--qRoaCMyI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=gV1tUX9gj3Q:G--qRoaCMyI:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/gV1tUX9gj3Q&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 01 May 2012 14:46:52 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Libnames,  Who Needs 'Em?</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-5837054273086972286</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/491wec4i5YM/note-libnames-who-needs.html</link>
	<description>My team received what turned out to be an interesting call for help from one of our clients today. We resolved the client's coding error but it also served as a reminder of a little used feature of BASE SAS,&amp;nbsp; namely the ability to specify directory names in code rather than bother with libnames. There are pro's and con's for doing this. I'll discuss these below after I explain the feature. &lt;br /&gt;
&lt;br /&gt;
We're used to specifying data sets on DATA statements in the &quot;libname.dataset&quot; style. However, instead of using a data set name, you can specify the physical pathname to the file, using syntax that your operating system understands. The pathname must be enclosed in single or double quotation marks. Here's an example:&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;data &quot;c:\mydata\mydataset&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In the foregoing example, the DATA step would create a SAS data set file named mydataset.sas7bdat in the c:\mydata directory.&lt;br /&gt;
&lt;br /&gt;
There's more information in the section titled &quot;&lt;a href=&quot;http://support.sas.com/documentation/cdl/en/lrcon/62753/HTML/default/viewer.htm#p1jk3ljgmjhiaan17brwd9m4w7oo.htm&quot;&gt;Accessing Permanent SAS Files without a Libref&lt;/a&gt;&quot; in the SAS 9.3 Language Reference: Concepts. You will see that we can use the same naming technique in almost any situation where a library and data set name are expected, e.g. a SET statement, a MERGE statement, an UPDATE statement, a MODIFY statement, the DATA= option of a SAS procedure, and the OPEN function.&lt;br /&gt;
&lt;br /&gt;
My client's coding error resulted from the fact that they had specified a macro parameter intended as a data set name and they had surrounded it with quotes. The call&amp;nbsp;&lt;span&gt;%demo(&quot;name&quot;)&lt;/span&gt; resulted in a DATA statement like this: &lt;span&gt;data &quot;name&quot;&lt;/span&gt;. As a result, SAS tried to create a file named name.sas7bdat in the SAS session's current directory. That directory was the root directory of the SASApp server, the user didn't have permission to write to it, and hence the code failed. The intention was to create a data set named &quot;name&quot; in the work directory, the actuality was significantly different. It was all caused by a common misunderstanding/mistake - using quotes around character strings in macros.&lt;br /&gt;
&lt;br /&gt;
So, we understand how we can dispense with LIBNAME statements, but should we take advantage of this capability? Well, I can't see too many advantages, but I can see plenty of disadvantages!&lt;br /&gt;
&lt;br /&gt;
The disadvantages include i) need to accurately specify directory paths throughout the program (rather than eight character libnames), ii) cannot quickly and easily change a directory location (as can be useful when testing), and iii) cannot specify an engine for the library.&lt;br /&gt;
&lt;br /&gt;
Can you think of any advantages? Let us know your suggestions in a comment.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
You are very welcome to share this email with your colleagues. However, if you do so, please recommend that they subsequently create their own subscription to NOTE: by linking to http://feedburner.google.com/fb/a/mailverify?uri=NoteTheBlogOfRtsleu-DevelopmentsInSas&amp;amp;loc=en_US. Thank you for your continued support of NOTE:.&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-5837054273086972286?l=www.notecolon.info&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/491wec4i5YM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 01 May 2012 12:00:02 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: NOTE: Registration for SAS Professionals Convention 2012 Now Open</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-5371775852759142866</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/0dRiSuxBzLs/note-registration-for-sas-professionals.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;
&lt;a href=&quot;http://api.ning.com/files/DurWSh1k3wFiHDXG*ePA8NR5aZOnBvV*oTEKfKNA15iaYuziCOfVOW81tj0GRM-oOAAFOPzvU8F7lB3lp7KYGxd-7dStRu5b/SPC2012_SASProfs_ad.gif&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;183&quot; src=&quot;http://api.ning.com/files/DurWSh1k3wFiHDXG*ePA8NR5aZOnBvV*oTEKfKNA15iaYuziCOfVOW81tj0GRM-oOAAFOPzvU8F7lB3lp7KYGxd-7dStRu5b/SPC2012_SASProfs_ad.gif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Before we've even got SAS Global Forum under our belts, registration for SAS Professionals Convention in Marlow, July 10th to 12th 2012, is open!&lt;br /&gt;
&lt;br /&gt;
At £125 for three days of SAS activities, it's got to be the best value SAS offer you'll see in the UK in 2012. Check out the details by following the link from the &lt;a href=&quot;http://www.sasprofessionals.net/&quot;&gt;SAS Professionals web site&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Day #1 focuses on SAS certification. If you want to demonstrate your SAS skills and knowledge, or provide evidence of the same for others, then certification is your solution.&lt;br /&gt;
&lt;br /&gt;
Day #2 focuses on technical content and includes sessions on analytics, architecture, customer intelligence and the all-new SAS Visual Analytics (in-memory analytics tools). All streams offer high quality speakers but the business intelligence stream is a stand-out, featuring Guy Garrett from &lt;a href=&quot;http://www.achieveintelligence.com/&quot;&gt;Achieve Intelligence&lt;/a&gt; and Tricia Aanderud (co-author of the &lt;a href=&quot;http://www.bi-notes.com/&quot;&gt;BI Notes blog&lt;/a&gt; and the &lt;a href=&quot;http://www.bi-notes.com/sas-bi-book-all-about/&quot;&gt;Building Business Intelligence Using SAS&lt;/a&gt; book).&lt;br /&gt;
&lt;br /&gt;
Day #3 features &lt;a href=&quot;http://blogs.sas.com/content/sasdummy/&quot;&gt;SAS Dummy&lt;/a&gt; blogster Chris Hemedinger in the morning, and is followed by industry-specific streams in the afternoon.&lt;br /&gt;
&lt;br /&gt;
Combined with social and networking events during the evenings, it's an unmissable event!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
You are very welcome to share this email with your colleagues. However, if you do so, please recommend that they subsequently create their own subscription to NOTE: by linking to http://feedburner.google.com/fb/a/mailverify?uri=NoteTheBlogOfRtsleu-DevelopmentsInSas&amp;amp;loc=en_US. Thank you for your continued support of NOTE:.&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-5371775852759142866?l=www.notecolon.info&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/0dRiSuxBzLs&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 21:48:16 +0000</pubDate>
</item>
<item>
	<title>The SAS Bookshelf: What should banks be for?</title>
	<guid>http://blogs.sas.com/content/publishing/?p=2623</guid>
	<link>http://feedproxy.google.com/~r/saspublishing/~3/-EZX_8U5lXQ/</link>
	<description>The question above is posed in the SAS eBook The Transformation of the Banking Industry: a brave new world. The financial services industry is still the largest chunk of our sales, clocking in at over 40% globally. We like to talk to our customers a lot and share their stories. [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=-EZX_8U5lXQ:eIJhhZbWEYE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/saspublishing?a=-EZX_8U5lXQ:eIJhhZbWEYE:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/saspublishing?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/saspublishing/~4/-EZX_8U5lXQ&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 16:27:51 +0000</pubDate>
</item>
<item>
	<title>The SAS Training Post: Two opportunities for students at Analytics 2012</title>
	<guid>http://blogs.sas.com/content/sastraining/?p=2333</guid>
	<link>http://feedproxy.google.com/~r/TheSasTrainingPost/~3/BTyAzf5UP0E/</link>
	<description>I’m excited to let you know about two opportunities for students at the Analytics 2012 Conference, Oct. 8-9 in Las Vegas. The first is the Student Poster Contest. If you have some research to share with the analytics community, consider submitting an abstract. If your abstract is accepted, then you [...]&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=BTyAzf5UP0E:ZAKPITe8vK0:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?a=BTyAzf5UP0E:ZAKPITe8vK0:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheSasTrainingPost?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheSasTrainingPost/~4/BTyAzf5UP0E&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 12:44:06 +0000</pubDate>
</item>
<item>
	<title>SAS and R: Example 9.29: the perils of for loops</title>
	<guid>tag:blogger.com,1999:blog-1275149608391671670.post-5375707955074537724</guid>
	<link>http://feedproxy.google.com/~r/SASandR/~3/4YZ9UJKJmeg/example-929-perils-of-for-loops.html</link>
	<description>A recent exchange on the &lt;a href=&quot;https://stat.ethz.ch/mailman/listinfo/r-sig-teaching&quot;&gt;R-sig-teaching&lt;/a&gt; list featured a discussion of how best to teach new students R.  The initial post included an exercise to write a function, that given a n, will draw n rows of a triangle made up of &quot;*&quot;, noting that for a beginner, this may require two for loops.  For example, in pseudo-code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;for i = 1 to n&lt;br /&gt;  for j = 1 to i&lt;br /&gt;    print &quot;*&quot;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Unfortunately, as several folks (including &lt;a href=&quot;http://astro.temple.edu/~rmh/&quot;&gt;Richard M. Heiberger&lt;/a&gt; and R. Michael Weylandt) noted, for loops in general are not the best way to take full advantage of R.  In this entry, we review two solutions they proposed which fit within the R philosophy.&lt;br /&gt;&lt;br /&gt;Richard's solution uses the &lt;tt&gt;outer()&lt;/tt&gt; function to generate a 5x5 matrix of logical values indicating whether the column number is bigger than the row number.  Next the &lt;tt&gt;ifelse()&lt;/tt&gt; function is used to replace &lt;tt&gt;TRUE&lt;/tt&gt; with &lt;tt&gt;*&lt;/tt&gt;.  &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; ifelse(outer(1:5, 1:5, `&gt;=`), &quot;*&quot;, &quot; &quot;)  &lt;br /&gt;     [,1] [,2] [,3] [,4] [,5]&lt;br /&gt;[1,] &quot;*&quot;  &quot; &quot;  &quot; &quot;  &quot; &quot;  &quot; &quot; &lt;br /&gt;[2,] &quot;*&quot;  &quot;*&quot;  &quot; &quot;  &quot; &quot;  &quot; &quot; &lt;br /&gt;[3,] &quot;*&quot;  &quot;*&quot;  &quot;*&quot;  &quot; &quot;  &quot; &quot; &lt;br /&gt;[4,] &quot;*&quot;  &quot;*&quot;  &quot;*&quot;  &quot;*&quot;  &quot; &quot; &lt;br /&gt;[5,] &quot;*&quot;  &quot;*&quot;  &quot;*&quot;  &quot;*&quot;  &quot;*&quot; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Michael's solution uses the &lt;tt&gt;lapply()&lt;/tt&gt; function to call a function repeatedly for different values of &lt;tt&gt;n&lt;/tt&gt;.  This returns a list rather than a matrix, but accomplishes the same task.  &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; lapply(1:5, function(x) cat(rep(&quot;*&quot;, x), &quot;\n&quot;))&lt;br /&gt;* &lt;br /&gt;* * &lt;br /&gt;* * * &lt;br /&gt;* * * * &lt;br /&gt;* * * * * &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;While this exercise is of little practical value, it does illustrate some important points, and provides a far more efficient as well as elegant way of accomplishing the tasks.  For those interested in more, another resource is the &lt;a href=&quot;http://www.burns-stat.com/pages/Tutor/R_inferno.pdf&quot;&gt;R Inferno&lt;/a&gt; project of &lt;a href=&quot;http://burns-stat.com/&quot;&gt;Patric Burns&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;&lt;b&gt;SAS&lt;/b&gt;&lt;br /&gt;We demonstrate a SAS data step solution mainly to call out some useful features and cautions.  In all likelihood a &lt;tt&gt;proc iml&lt;/tt&gt; matrix-based solution would be more elegant;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;data test;&lt;br /&gt;array star [5] $ star1 - star5;&lt;br /&gt;do i = 1 to 5;&lt;br /&gt;  star[i] = &quot;*&quot;;&lt;br /&gt;  output;&lt;br /&gt;  end;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc print noobs; var star1 - star5; run;&lt;br /&gt;&lt;br /&gt;             star1    star2    star3    star4    star5&lt;br /&gt;&lt;br /&gt;               *&lt;br /&gt;               *        *&lt;br /&gt;               *        *        *&lt;br /&gt;               *        *        *        *&lt;br /&gt;               *        *        *        *        *&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In particular, note the &lt;tt&gt;$&lt;/tt&gt; in the &lt;tt&gt;array&lt;/tt&gt; statement, which allows the variables to contain characters; by default variables created by an &lt;tt&gt;array&lt;/tt&gt; statement are numeric.  In addition, note the reference to a sequentially suffixed list of variables using the single hyphen shortcut; this would help in generalizing to n rows.  Finally, note that we were able to avoid a second &lt;tt&gt;do&lt;/tt&gt; loop (SAS' primary iterative looping syntax) mainly by luck-- the most recently generated value of a variable is saved by default.  This can cause trouble, in general, but here it keeps all the previous &quot;*&quot;s when moving on to the next row.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;An unrelated note about aggregators&lt;/b&gt;We love aggregators!  Aggregators collect blogs that have similar coverage for the convenience of readers, and for blog authors they offer a way to reach new audiences.  &lt;a href=&quot;http://sas-and-r.blogspot.com/&quot;&gt;SAS and R&lt;/a&gt; is aggregated by &lt;a href=&quot;http://www.r-bloggers.com/&quot;&gt;R-bloggers&lt;/a&gt; and &lt;a href=&quot;http://proc-x.com/&quot;&gt;PROC-X&lt;/a&gt; with our permission, and by at least 2 other aggregating services which have never contacted us.  If you read this on an aggregator that does not credit the blogs it incorporates, please come visit us at &lt;a href=&quot;http://sas-and-r.blogspot.com/&quot;&gt;SAS and R&lt;/a&gt;.  We answer comments there and offer direct subscriptions if you like our content.  In addition, no one is allowed to profit by this work under our &lt;a href=&quot;http://creativecommons.org/licenses/by-nc-sa/3.0/&quot;&gt;license&lt;/a&gt;; if you see advertisements on this page, the aggregator is violating the terms by which we publish our work.&lt;pre&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1275149608391671670-5375707955074537724?l=sas-and-r.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=4YZ9UJKJmeg:qS9-_-FLhAI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=4YZ9UJKJmeg:qS9-_-FLhAI:J3aVl1i_38o&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=J3aVl1i_38o&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=4YZ9UJKJmeg:qS9-_-FLhAI:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=4YZ9UJKJmeg:qS9-_-FLhAI:63t7Ie-LG7Y&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?d=63t7Ie-LG7Y&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=4YZ9UJKJmeg:qS9-_-FLhAI:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?i=4YZ9UJKJmeg:qS9-_-FLhAI:F7zBnMyn0Lo&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/SASandR?a=4YZ9UJKJmeg:qS9-_-FLhAI:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/SASandR?i=4YZ9UJKJmeg:qS9-_-FLhAI:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/SASandR/~4/4YZ9UJKJmeg&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 11:34:00 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Requirements. Whose Responsibility? #sasgf12</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-5030854894334119673</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/QSxUzHKY5BA/requirements-whose-responsibility.html</link>
	<description>&lt;div class=&quot;separator&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-8dXUvs3dmeQ/T52bGlJbfwI/AAAAAAAAAAs/wRfrdqNa-rg/s1600/cooperate.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;http://3.bp.blogspot.com/-8dXUvs3dmeQ/T52bGlJbfwI/AAAAAAAAAAs/wRfrdqNa-rg/s320/cooperate.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
I was pleased to see some papers on the subject of software development processes at SAS Global Forum this year. The IT industry hasn't yet reached a point where a consensus on the perfect software development process has been reached (will it ever?). So, it's no surprise that opinions differ on some matters.&lt;br /&gt;
&lt;br /&gt;
One paper I attended opined that &quot;requirements are developed by the end user of the software and not by the developer&quot;. The paper had a lot to commend it, but on this one point I strongly disagree.&lt;br /&gt;
&lt;br /&gt;
Capturing requirements is a skill. It is not easy to gather all facets of the business requirements, and it is not easy to document them in a fashion that best serves all the needs of the development process (and beyond). Thus, it is unreasonable to expect users (or developers) to possess these skills unless they have been explicitly trained.&lt;br /&gt;
&lt;br /&gt;
If training is required (e.g. in the absence of trained Analysts), does it not make more economic sense to train developers? They can be trained once and then use their skills (and growing experience) multiple times on subsequent projects. If you train a user, they are unlikely to re-use those skills (unless their application is in a constant state of change).&lt;br /&gt;
&lt;br /&gt;
There are a variety of tools and techniques for performing analysis for requirements capture. One of the key skills is the ability to see beyond the current business process and to capture the true needs of the new business process. It is not apparent that users have a proper understanding of all aspects of their current business process; it is far from likely that they can accurately specify their target requirements. If requirements are to be of use, they must be documented in a form that facilitates their subsequent use by a) architects and designers, b) test case authors, and c) maintenance developers.&lt;br /&gt;
&lt;br /&gt;
In my opinion, it is a developer's responsibility to help the user understand their current business process (particularly the processes for dealing with abnormal situations), and to guide them in the art of the possible for their target requirements. Developers need people-skills in addition to knowledge of tools and techniques for requirements capture.&lt;br /&gt;
&lt;br /&gt;
The art of the possible is a key element of the requirements capture phase. We've all had experience of i) users asking for features that seem simple to them but are difficult/expensive for us to implement, and ii) users not asking for features that would be of high value to them but which they thought were too hard for us to deliver. I've seen countless examples of users telling me that they need the ability to:&lt;br /&gt;
a) email various reports to groups of people, and&lt;br /&gt;
b) write reports as spreadsheets.&lt;br /&gt;
&lt;br /&gt;
Users typically express requirements in terms of things with which they are familiar, i.e. existing technology. We can advise them of the extended capabilities of:&lt;br /&gt;
a) portal and publish/subscribe capabilities that avoid the need to clog-up the email system with uncontrolled copies of report, and&lt;br /&gt;
b) web report studio and add-in for&amp;nbsp;Microsoft&amp;nbsp;office that give the user the ability to &quot;interact&quot; with the data, without the need for the data to leave the data centre.&lt;br /&gt;
&lt;br /&gt;
If you're a developer, and you don't have professional Analysts to help you, take an interest in requirements capture; appreciate the skills, techniques and tools at your disposal, and (if possible) get some training to enhance your ability.&lt;br /&gt;
&lt;br /&gt;
Delivering a successful project is a result of good teamwork. It is not the users' sole responsibility to produce good requirements; nor am I saying that it is the developers' sole responsibility. It's a question of what each party brings to the table. The users have to be&amp;nbsp;committed&amp;nbsp;and provide their time in addition to their knowledge and experience of the business; the developers must be willing and able to help the users express their requirements. You will succeed as a team.&lt;br /&gt;
&lt;br /&gt;
Garbage in, garbage out. If all of the project's stakeholders are not clear on what is to be delivered, the chances of meeting everybody's expectations are much reduced.&amp;nbsp;The capture of good quality requirements is crucial for ensuring the success of your projects. Play your part!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
You are very welcome to share this email with your colleagues. However, if you do so, please recommend that they subsequently create their own subscription to NOTE: by linking to http://feedburner.google.com/fb/a/mailverify?uri=NoteTheBlogOfRtsleu-DevelopmentsInSas&amp;amp;loc=en_US. Thank you for your continued support of NOTE:.&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-5030854894334119673?l=www.notecolon.info&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/QSxUzHKY5BA&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 11:00:04 +0000</pubDate>
</item>
<item>
	<title>The DO Loop: The LAG function: Useful for more than time series analysis</title>
	<guid>http://blogs.sas.com/content/iml/?p=5147</guid>
	<link>http://feedproxy.google.com/~r/TheDoLoop/~3/0DUI-bHFsNo/</link>
	<description>&lt;p&gt;
To a statistician, the &lt;a href=&quot;http://support.sas.com/documentation/cdl/en/imlug/64248/HTML/default/viewer.htm#imlug_langref_sect172.htm&quot;&gt;LAG function&lt;/a&gt; (which was introduced in SAS/IML 9.22) is useful for time series analysis. To a numerical analyst and a statistical programmer, the function provides a convenient way to compute quantitites that involve adjacent values in any vector.
&lt;/p&gt;

&lt;p&gt;
The LAG function is essentially a &quot;shift operator.&quot; It shifts a vector of values and pads the result with missing values so that the returned vector has the same number of elements as the original vector. For example, the following SAS/IML statements define the first few terms of the Fibonacci series and call the LAG function to shift the series by one element. 
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;proc iml;
v = {1, 1, 2, 3, 5, 8, 13, 21}; /* Fibonacci sequence */
lag1 = lag(v);            /* by default, lag=1 ==&amp;gt; shift forward */
first = 1:(nrow(v)-1);    /* index 1:(N-1) */
v1 = v[first];            /* extract all but the last element */
print lag1 v1;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;




&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_lag.png&quot; alt=&quot;&quot; width=&quot;69&quot; height=&quot;248&quot; class=&quot;alignnone size-full wp-image-5200&quot; /&gt;

&lt;p&gt;
The returned vector, &lt;tt&gt;lag1&lt;/tt&gt;, contains a missing value in the first element and does not contains the last element of &lt;tt&gt;v&lt;/tt&gt;.
Notice that the nonmissing values are similar to &lt;tt&gt;v1&lt;/tt&gt;, which is obtained by subsetting the first N-1 elements of the vector &lt;tt&gt;v&lt;/tt&gt;.
&lt;/p&gt;&lt;p&gt;
You can shift elements the other way by using a negative value for the lag parameter. (This is sometimes called computing a &lt;em&gt;lead&lt;/em&gt;.)
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;lag2 = lag(v, -1);       /* shift backward */
last = 2:nrow(v);        /* index 2:N */
v2 = v[last];            /* extract all but first element */&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;





&lt;p&gt;
The returned vector (not shown) contains a missing value in the last element and does not contains the first element of &lt;tt&gt;v&lt;/tt&gt;.
&lt;/p&gt;&lt;p&gt;
The LAG function is valuable when you want to compute a quantity that involves adjacent elements. For example, the following statements compute the ratio of adjacent values in the Fibonacci sequence:
&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;text&quot;&gt;z = v/lag(v); /* ratio of adjacent values */
print z;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;



&lt;img src=&quot;http://blogs.sas.com/content/iml/files/2012/05/t_lag2.png&quot; alt=&quot;&quot; width=&quot;77&quot; height=&quot;247&quot; class=&quot;alignnone size-full wp-image-5201&quot; /&gt;

&lt;p&gt;

This ratio quickly converges to the Golden Ratio, which is which is 1.61803399.... In a previous post, I show how you can &lt;a href=&quot;http://blogs.sas.com/content/iml/2010/10/05/matrices-eigenvalues-fibonacci-and-the-golden-ratio/&quot;&gt;undestand this result by looking at the eigenvalues of a certain linear transformation&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
So, yes, by all means, use the LAG function to compute lags and leads in time series data. However, the LAG functon is also useful for any numerical computation that involves adjacent values in a sequence.
&lt;/p&gt;

&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;tag-links&quot;&gt;tags: &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/getting-started/&quot;&gt;Getting Started&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/numerical-analysis/&quot;&gt;Numerical Analysis&lt;/a&gt;, &lt;a href=&quot;http://blogs.sas.com/content/iml/tag/statistical-programming/&quot;&gt;Statistical Programming&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=0DUI-bHFsNo:fmMmSno9DsI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=0DUI-bHFsNo:fmMmSno9DsI:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?a=0DUI-bHFsNo:fmMmSno9DsI:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/TheDoLoop?i=0DUI-bHFsNo:fmMmSno9DsI:gIN9vFwOqvQ&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheDoLoop/~4/0DUI-bHFsNo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 09:26:07 +0000</pubDate>
</item>
<item>
	<title>NOTE: The blog of RTSL.eu: Papers Without SAS?! #sasgf12</title>
	<guid>tag:blogger.com,1999:blog-3401137187963845372.post-1856504269124587714</guid>
	<link>http://feedproxy.google.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~3/1UE7P8soy-o/papers-without-sas-sasgf12.html</link>
	<description>I was pleased to see a number of papers at this year's SAS Global Forum that dared to focus on topics outside of SAS technology and syntax. Two papers that particularly caught my interest were &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/021-2012.pdf&quot;&gt;How to Create a Business Intelligence Strategy&lt;/a&gt; by Guy Garrett, and &lt;a href=&quot;http://support.sas.com/resources/papers/proceedings12/194-2012.pdf&quot;&gt;The Systems Development Life Cycle (SDLC) as a Standard: Beyond the Documentation&lt;/a&gt; by Dianne Rhodes. These papers were good demonstrations of the fact that you can buy the best software in the world, but you'll not optimise your return on investment if you don't put it to use in a planned, structured manner.&lt;br /&gt;
&lt;br /&gt;
The focus of SAS Global Forum should always be SAS software and solutions. I'm not suggesting the event should be turned into a computer science conference, but there's a balance that can be struck. In my opinion, the balance lies at a point whereby attendees' interest in planning and process can be piqued such that they want to find out more once they return to their office.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
You are very welcome to share this email with your colleagues. However, if you do so, please recommend that they subsequently create their own subscription to NOTE: by linking to http://feedburner.google.com/fb/a/mailverify?uri=NoteTheBlogOfRtsleu-DevelopmentsInSas&amp;amp;loc=en_US. Thank you for your continued support of NOTE:.&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3401137187963845372-1856504269124587714?l=www.notecolon.info&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/NoteTheBlogOfRtsleu-DevelopmentsInSas/~4/1UE7P8soy-o&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 30 Apr 2012 10:00:06 +0000</pubDate>
</item>

</channel>
</rss>

