<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5055696089992083602</id><updated>2012-01-28T22:10:47.694-08:00</updated><category term='sas unix hsph run program batch mode'/><category term='sas background unix ampersand'/><category term='wildcards matching variable macro variable'/><category term='unix banner titles program misc'/><category term='SAS unix data manipulation percentiles'/><category term='log file line number easy nl error SAS unix'/><category term='genmod logistic interaction dummy macro variable class'/><category term='macro ods output logistic regression'/><category term='SAS unix csv excel delimited file data input'/><category term='sas proc reg regression increment standard deviation mean centered merge'/><category term='collapse dataset aggregate genmod logistic binomial poisson generate data random'/><category term='Indicator dummy variables statistics data manipulation analysis SAS UNIX'/><category term='format character number convert input'/><category term='sas unix excel data manipulation ods'/><category term='SAS unix ODS pdf html output'/><category term='delete sas comment macro'/><category term='ods sas unix postscript ps pdf graphics plot eps ps color  pslepscf pscolor'/><category term='WinSCP client easy UNIX SAS'/><category term='aggregate analysis 2x2 tables chi square proportions frequency'/><category term='symput macro highest observation SAS'/><category term='SAS redirect output log files'/><category term='missing data sas means nmiss'/><category term='dirty data management scan substr name functions sas'/><category term='SAS unix tab delimited file data input'/><category term='SAS macro unix table 1 analysis'/><category term='SAS UNIX compressed data manipulation gzip zip'/><title type='text'>SAS on UNIX@hsph</title><subtitle type='html'>Using Statistical program SAS on UNIX operating system. Directed towards Harvard University School of Public Health students and researchers but should be useful to many.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-1891979669444067313</id><published>2011-03-14T17:33:00.000-07:00</published><updated>2011-03-14T17:34:28.476-07:00</updated><title type='text'>direct filename with path to a file</title><content type='html'>dir /s/b&gt;list.txt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-1891979669444067313?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/1891979669444067313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=1891979669444067313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1891979669444067313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1891979669444067313'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2011/03/direct-filename-with-path-to-file.html' title='direct filename with path to a file'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3705999812211343647</id><published>2011-03-14T08:49:00.001-07:00</published><updated>2011-03-14T08:49:40.435-07:00</updated><title type='text'>Regular expression wildcard</title><content type='html'>.+&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.ats.ucla.edu/stat/sas/code/perl_wildcard.htm"&gt;http://www.ats.ucla.edu/stat/sas/code/perl_wildcard.htm&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3705999812211343647?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3705999812211343647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3705999812211343647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3705999812211343647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3705999812211343647'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2011/03/regular-expression-wildcard.html' title='Regular expression wildcard'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-5899331692721146502</id><published>2011-03-10T12:36:00.000-08:00</published><updated>2011-03-10T12:55:57.187-08:00</updated><title type='text'>Regular expressions</title><content type='html'>1. Search and extract&lt;div&gt;a. Use Prxmatch before Prxposn&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Remove whitespace &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;readhtml&lt;/div&gt;&lt;div&gt;xls2csv to speed up the reading&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-5899331692721146502?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/5899331692721146502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=5899331692721146502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/5899331692721146502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/5899331692721146502'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2011/03/regular-expressions.html' title='Regular expressions'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-7169317360506609941</id><published>2008-05-08T08:07:00.000-07:00</published><updated>2008-05-08T08:12:39.469-07:00</updated><title type='text'>Create a variable having value of median in categories</title><content type='html'>To find the median values of the categories (e.g. to assess test of trend)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%macro hint(var1,var2);&lt;br /&gt; &lt;br /&gt;proc means data=fret  median;&lt;br /&gt;   class &amp;var1;&lt;br /&gt;   var &amp;var2;&lt;br /&gt;   OUTPUT OUT=&amp;amp;var2 MEDIAN= ;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;   data null;&lt;br /&gt;set &amp;var2;&lt;br /&gt;call symputx("&amp;amp;var2.m"||put(_n_,1.),&amp;amp;var2,'g');&lt;br /&gt;run;&lt;br /&gt;%put &amp;amp;var2.m;&lt;br /&gt;%put _user_;&lt;br /&gt;%mend;&lt;br /&gt;**depending on the number of categories (n),  you would have n+1 macro variables.&lt;br /&gt;**********run like this *************;&lt;br /&gt;%hint(_alcoc,alc) /***_alcoc has 4 categories **/&lt;br /&gt;&lt;br /&gt;/*** this would create macro variables as &amp;amp;alcm2 - &amp;amp;alcm(n+1)***/&lt;br /&gt;&lt;br /&gt;data new;&lt;br /&gt;            set fret;&lt;br /&gt;&lt;br /&gt;   if _alcoc =. then alcm = .;&lt;br /&gt;else if _alcoc =1 then alcm=&amp;alcm2; /**note this is &amp;amp;alcm2 ***/&lt;br /&gt;else if _alcoc =2 then alcm=&amp;alcm3;&lt;br /&gt;else if _alcoc= 3 then alcm=&amp;alcm4;&lt;br /&gt;else if _alcoc = 4 then alcm=&amp;alcm5;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-7169317360506609941?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/7169317360506609941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=7169317360506609941' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/7169317360506609941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/7169317360506609941'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2008/05/create-variable-having-value-of-median.html' title='Create a variable having value of median in categories'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-7648866270568819095</id><published>2008-03-27T11:32:00.000-07:00</published><updated>2008-03-27T11:46:26.438-07:00</updated><title type='text'>Coding interactions/effect modification to get Confidence Intervals</title><content type='html'>&lt;span style="font-weight: bold;"&gt;/************ THIS IS 4 X 3 interaction *************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VARA0VARB0=0; VARA0VARB1=0;VARA0VARB2=0; VARA0VARB3=0;&lt;br /&gt;VARA1VARB0=0; VARA1VARB1=0;VARA1VARB2=0; VARA1VARB3=0;&lt;br /&gt;VARA2VARB0=0; VARA2VARB1=0;VARA2VARB2=0; VARA2VARB3=0;&lt;br /&gt;VARA3VARB0=0; VARA3VARB1=0;VARA3VARB2=0; VARA3VARB3=0;&lt;br /&gt;&lt;br /&gt;IF VARA=0 THEN DO;&lt;br /&gt;       IF VARB=0 THEN VARA0VARB0=0;&lt;br /&gt;       IF VARB=1 THEN VARA0VARB1=1;&lt;br /&gt;       IF VARB=2 THEN VARA0VARB2=2;&lt;br /&gt;       IF VARB=3 THEN VARA0VARB3=3;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;IF VARA=1 THEN DO;&lt;br /&gt;       IF VARB=0 THEN VARA1VARB0=0;&lt;br /&gt;       IF VARB=1 THEN VARA1VARB1=1;&lt;br /&gt;       IF VARB=2 THEN VARA1VARB2=2;&lt;br /&gt;       IF VARB=3 THEN VARA1VARB3=3;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;IF VARA=2 THEN DO;&lt;br /&gt;       IF VARB=0 THEN VARA2VARB0=0;&lt;br /&gt;       IF VARB=1 THEN VARA2VARB1=1;&lt;br /&gt;       IF VARB=2 THEN VARA2VARB2=2;&lt;br /&gt;       IF VARB=3 THEN VARA2VARB3=3;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;IF VARA=3 THEN DO;&lt;br /&gt;       IF VARB=0 THEN VARA3VARB0=0;&lt;br /&gt;       IF VARB=1 THEN VARA3VARB1=1;&lt;br /&gt;       IF VARB=2 THEN VARA3VARB2=2;&lt;br /&gt;       IF VARB=3 THEN VARA3VARB3=3;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;%LET VARB_VARAINT=&lt;br /&gt;      VARA0VARB1 VARA0VARB2 VARA0VARB3&lt;br /&gt;VARA1VARB0 VARA1VARB1 VARA1VARB2 VARA1VARB3&lt;br /&gt;VARA2VARB0 VARA2VARB1 VARA2VARB2 VARA2VARB3&lt;br /&gt;VARA3VARB0 VARA3VARB1 VARA3VARB2 VARA3VARB3;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;/* To find the point estimates and confidence intervals of each level of VARA with each level of VARB just enter the &amp;amp;VARB_VARAINT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;in the models */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;/* you can tailor the code with find and replace in SAS/Xemacs/Word/Textpad. */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/************ THIS IS 4 X 4 interaction *************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VARA0VARB0=0; VARA0VARB1=0; VARA0VARB2=0; VARA0VARB3=0;  /* 1ST QUINTILE*/&lt;br /&gt;VARA1VARB0=0; VARA1VARB1=0; VARA1VARB2=0; VARA1VARB3=0; /* 2ND QUINTILE*/&lt;br /&gt;VARA2VARB0=0; VARA2VARB1=0; VARA2VARB2=0; VARA2VARB3=0;  /* 3RD QUINTILE */&lt;br /&gt;VARA3VARB0=0; VARA3VARB1=0; VARA3VARB2=0; VARA3VARB3=0; /* 4TH QUINTILE */&lt;br /&gt;&lt;br /&gt;IF VARA=0 then do;&lt;br /&gt;if VARB=0 then VARA0VARB0=1;&lt;br /&gt;if VARB=1 then VARA0VARB1=1;&lt;br /&gt;if VARB=2 then VARA0VARB2=1;&lt;br /&gt;if VARB=3 then VARA0VARB3=1;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;IF VARA=1 then do;&lt;br /&gt;if VARB=0 then VARA1VARB0=1;&lt;br /&gt;if VARB=1 then VARA1VARB1=1;&lt;br /&gt;if VARB=2 then VARA1VARB2=1;&lt;br /&gt;if VARB=3 then VARA1VARB3=1;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;IF VARA=2 then do;&lt;br /&gt;if VARB=0 then VARA2VARB0=1;&lt;br /&gt;if VARB=1 then VARA2VARB1=1;&lt;br /&gt;if VARB=2 then VARA2VARB2=1;&lt;br /&gt;if VARB=3 then VARA2VARB3=1;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IF VARA=3 then do;&lt;br /&gt;if VARB=0 then VARA3VARB0=1;&lt;br /&gt;if VARB=1 then VARA3VARB1=1;&lt;br /&gt;if VARB=2 then VARA3VARB2=1;&lt;br /&gt;if VARB=3 then VARA3VARB3=1;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%LET VARA_VARBINT=&lt;br /&gt;VARA0VARB1 VARA0VARB2 VARA0VARB3&lt;br /&gt;VARA1VARB0 VARA1VARB1 VARA1VARB2 VARA1VARB3&lt;br /&gt;VARA2VARB0 VARA2VARB1 VARA2VARB2 VARA2VARB3&lt;br /&gt;VARA3VARB0 VARA3VARB1 VARA3VARB2 VARA3VARB3 ;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-7648866270568819095?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/7648866270568819095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=7648866270568819095' title='225 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/7648866270568819095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/7648866270568819095'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2008/03/coding-interactionseffect-modification.html' title='Coding interactions/effect modification to get Confidence Intervals'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>225</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-5933838008293642575</id><published>2008-02-01T17:43:00.000-08:00</published><updated>2008-02-01T17:45:21.048-08:00</updated><title type='text'>Use a sample to hasten preliminary analysis</title><content type='html'>I have used following ways;&lt;br /&gt;&lt;br /&gt;**************************&lt;br /&gt;proc surveyselect data=onenn method=srs n=10000 out=onen;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;**************************&lt;br /&gt;    data onen;&lt;br /&gt;         merge&lt;br /&gt;      fa7684 fa8694  fa9600 nur92 nur94 n94_dt&lt;br /&gt;                temp(in=mstr) nur96 nur98 act8600&lt;br /&gt;                nur82 nur88 n84_dt n86_dt n90_dt&lt;br /&gt;                fileb n767880 meddata&lt;br /&gt;                temp db7602&lt;br /&gt;                fatalmi mi stroke anginew&lt;br /&gt;                fatalstk deadff2004 pact spact end=_end_;&lt;br /&gt;     &lt;br /&gt;      by id;&lt;br /&gt;          exrec=1;&lt;br /&gt;          if first.id and mstr then exrec=0; /*** mas = master file ie. n80_cf ***/&lt;br /&gt;         if famdb82=1 then famdb88=1;&lt;br /&gt;         else famdb88=0;&lt;br /&gt;  random=RANUNI(-1);             /* GENERATE A RANDOM VECTOR */&lt;br /&gt;%let k=5000;   &lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;PROC SORT DATA=onen;&lt;br /&gt;  BY random;       /* SORT OBSERVATIONS BY THE RANDOM VECTOR */&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;DATA onensample;&lt;br /&gt;  SET onen(drop=random);&lt;br /&gt;  IF _N_ le &amp;k;                       /* SELECT THE FIRST K OBSERVATIONS */&lt;br /&gt;       /*both magne&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-5933838008293642575?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/5933838008293642575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=5933838008293642575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/5933838008293642575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/5933838008293642575'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2008/02/use-sample-to-hasten-preliminary.html' title='Use a sample to hasten preliminary analysis'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-5517947857163408965</id><published>2007-06-27T04:52:00.000-07:00</published><updated>2007-06-27T05:01:13.479-07:00</updated><title type='text'>Concatenating sas macro variables</title><content type='html'>&lt;span style="font-family: times new roman;font-size:100%;" &gt;I always forget how to do it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;%let nagasuchi=cases;&lt;br /&gt;data new;&lt;br /&gt; set library.old&amp;nagasuchi;&lt;br /&gt;&lt;br /&gt; This would be read as&lt;br /&gt; data new;&lt;br /&gt; set library.oldcases;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If the macro variable is a prefix&lt;br /&gt;&lt;br /&gt;data new;&lt;br /&gt;set library.&amp;nagasuchi.old;&lt;br /&gt;/* note the period*/&lt;br /&gt;&lt;br /&gt;This would be read as&lt;br /&gt;data new;&lt;br /&gt;set library.casesold;&lt;br /&gt;&lt;br /&gt;If the character following a macro variable is a period, then you need to use two periods.&lt;br /&gt;set in&amp;nagasuchi..select;&lt;br /&gt;&lt;br /&gt;After resolution, SAS would read this as SET in&lt;b&gt;cases.select&lt;/b&gt;;&lt;/span&gt;      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;More on this &lt;a href="http://www.caspur.it/risorse/softappl/doc/sas_docs/macro/z1071889.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-5517947857163408965?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/5517947857163408965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=5517947857163408965' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/5517947857163408965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/5517947857163408965'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/06/concatenating-sas-macro-variables.html' title='Concatenating sas macro variables'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3848804659066240130</id><published>2007-06-15T19:35:00.000-07:00</published><updated>2007-06-15T19:45:03.199-07:00</updated><title type='text'>LaTeX output in sas</title><content type='html'>/*Use one of the following ods statements */&lt;br /&gt;/* Legacy LaTeX for ODS */&lt;br /&gt;ods tagsets.latex file="legacy.tex";&lt;br /&gt;&lt;br /&gt;/* Legacy LaTeX with color for ODS */&lt;br /&gt;ods tagsets.colorlatex file="color.tex" stylesheet="sas.sty"(url="sas");&lt;br /&gt;&lt;br /&gt;/* Simplified LaTeX output that uses plain LaTeX tables */&lt;br /&gt;ods tagsets.simplelatex file="simple.tex" stylesheet="sas.sty"(url="sas");&lt;br /&gt;&lt;br /&gt;/* Same as above, but only prints out tables (no titles, notes, etc.) */&lt;br /&gt;/* Also, prints each table to a separate file */&lt;br /&gt;ods tagsets.tablesonlylatex file="C:\Documents and Settings\mk\My Documents\tablesonly.tex" (notop nobot) newfile=table;&lt;br /&gt;&lt;br /&gt;proc reg data=sashelp.class;&lt;br /&gt;   model Weight = Height Age;&lt;br /&gt;run;quit;&lt;br /&gt;&lt;br /&gt;/*Use one of the following ods statements corresponding to open statements*/&lt;br /&gt;&lt;br /&gt;ods tagsets.latex close;&lt;br /&gt;ods tagsets.colorlatex close;&lt;br /&gt;ods tagsets.tablesonlylatex close;&lt;br /&gt;ods tagsets.simplelatex close;&lt;br /&gt;&lt;br /&gt;/*from &lt;a href="http://support.sas.com/rnd/base/topics/odsmarkup/latex.html"&gt;SAS*/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3848804659066240130?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3848804659066240130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3848804659066240130' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3848804659066240130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3848804659066240130'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/06/latex-output-in-sas.html' title='LaTeX output in sas'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-2293147268035250236</id><published>2007-05-03T22:34:00.000-07:00</published><updated>2007-05-03T22:40:24.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix banner titles program misc'/><title type='text'>Unix Banner for interesting titles</title><content type='html'>ASCII Banner &lt;a href="http://www.angelfire.com/dc/apurvb/asc/bottom.html"&gt;1&lt;/a&gt; , &lt;a href="http://www.network-science.de/ascii/"&gt;2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;table bg border="0" width="100%" style="color:#ffffff;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;  .'|.           .                                   '||  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;.||.    ....   .||.   ....      ....   .. ...      .. ||  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt; ||    '' .||   ||   ||. '     '' .||   ||  ||   .'  '||  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt; ||    .|' ||   ||   . '|..    .|' ||   ||  ||   |.   ||  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;.||.   '|..'|'  '|.' |'..|'    '|..'|' .||. ||.  '|..'||. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;                          ||                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt; ....   .. ...     ... . ...  .. ...    ....   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;'' .||   ||  ||   || ||   ||   ||  ||  '' .||  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;.|' ||   ||  ||    |''    ||   ||  ||  .|' ||  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;'|..'|' .||. ||.  '||||. .||. .||. ||. '|..'|' &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;                 .|....'                       &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;pre&gt;  __       _                         _                     _            &lt;br /&gt;/ _| __ _| |_ ___    __ _ _ __   __| |   __ _ _ __   __ _(_)_ __   __ _&lt;br /&gt;| |_ / _` | __/ __|  / _` | '_ \ / _` |  / _` | '_ \ / _` | | '_ \ / _` |&lt;br /&gt;|  _| (_| | |_\__ \ | (_| | | | | (_| | | (_| | | | | (_| | | | | | (_| |&lt;br /&gt;|_|  \__,_|\__|___/  \__,_|_| |_|\__,_|  \__,_|_| |_|\__, |_|_| |_|\__,_|&lt;/pre&gt;&lt;/span&gt;                                             &lt;/pre&gt;&lt;!-- white text and background :) /!--&gt; &lt;span style="color: rgb(255, 255, 255);"&gt;Have fun. Don´t forget to bookmark this website :)&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;hr size="1"&gt; &lt;/span&gt; &lt;table bgcolor="#ffffff" border="0" width="100%"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt; &lt;script type="text/javascript"&gt;&lt;!-- google_ad_client = "pub-5034720518708375"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text"; google_ad_channel =""; google_page_url = document.location; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--&gt;&lt;/script&gt; &lt;script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-2293147268035250236?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/2293147268035250236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=2293147268035250236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2293147268035250236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2293147268035250236'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/05/unix-banner-for-interesting-titles.html' title='Unix Banner for interesting titles'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-4885846482820334072</id><published>2007-04-19T18:59:00.000-07:00</published><updated>2007-04-19T19:27:30.503-07:00</updated><title type='text'>Make results more presentable</title><content type='html'>SAS regression output requires additional steps to make it presentable. In previous posts, I have highlighted how to only get the results for variables of interest. However, these results are in row format&lt;br /&gt;&lt;br /&gt;Obs    F1         or      lci      uci    p_value&lt;br /&gt;&lt;br /&gt; 1     exp1     1.202    1.110    1.34      .001&lt;br /&gt; 2     exp2     1.340    1.202    1.56      .001&lt;br /&gt; 3     exp3     1.560    1.340    1.89      .001&lt;br /&gt; 4     exp4     1.890    1.560    1.98      .001&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This output need to be further transposed in Excel to get the results in following format.&lt;br /&gt;&lt;br /&gt;               Obs    exp0    exp1         exp2          exp3         exp4&lt;br /&gt;&lt;br /&gt;                1         1      1.2020       1.3400        1.5600       1.8900&lt;br /&gt;                2               1.11,1.34    1.202,1.56    1.34,1.89    1.56,1.98&lt;br /&gt;                3                0.0010       0.0010        0.0010       0.0010&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following program eliminates that&lt;br /&gt;&lt;br /&gt;proc import datafile="C:\Documents and Settings\mkaushik\Desktop\Output results.xls" out=auto replace;&lt;br /&gt;run;&lt;br /&gt;data inter /* / view=intermediate*/;&lt;br /&gt;  set auto;&lt;br /&gt;orc= put(or,6.4);&lt;br /&gt;  pvaluec= put(p_value,6.4);&lt;br /&gt;new=compress(lci||','||uci);&lt;br /&gt; output; *output the input record;&lt;br /&gt;if _n_=1 then do;&lt;br /&gt;F1='exp0';&lt;br /&gt;or=1; *set values for your added obs;&lt;br /&gt;lci=.;uci=.;p_value=.;&lt;br /&gt;orc="1";&lt;br /&gt;pvaluec=" ";&lt;br /&gt;new=" ";&lt;br /&gt;output; *output your added obs;&lt;br /&gt;end;&lt;br /&gt;proc sort;&lt;br /&gt;by F1;&lt;br /&gt;run;&lt;br /&gt;data inter;&lt;br /&gt;set inter;&lt;br /&gt;array Value (*) orc new pvaluec;&lt;br /&gt;do id =1 to 3;&lt;br /&gt;_value_ = value [id]; * since first numeric is that date;&lt;br /&gt;F1=F1;&lt;br /&gt;output;&lt;br /&gt;end;&lt;br /&gt;drop or p_value _name_;&lt;br /&gt;run;&lt;br /&gt;proc print data=inter;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc sort data=inter;&lt;br /&gt;by id;&lt;br /&gt;run;&lt;br /&gt;proc transpose data=inter out=outset(drop=id _name_) ;&lt;br /&gt;  by id ;&lt;br /&gt;  id F1 ;&lt;br /&gt;  var _value_;&lt;br /&gt;run;&lt;br /&gt;proc print data=outset;&lt;br /&gt;run;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-4885846482820334072?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/4885846482820334072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=4885846482820334072' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4885846482820334072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4885846482820334072'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/04/make-results-more-presentable.html' title='Make results more presentable'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-9125414598469078312</id><published>2007-04-05T12:57:00.000-07:00</published><updated>2007-04-05T16:10:29.185-07:00</updated><title type='text'>Correspondence between genmod and logistic</title><content type='html'>I have been exploring this for my work. I found some guidance &lt;a href="http://cc.uoregon.edu/cnews/spring2005/saslogistic.htm"&gt;here&lt;/a&gt;. I am including some details here.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;data drug;&lt;br /&gt;input drug$ x r n;&lt;br /&gt;cards;&lt;br /&gt;A  .1   1  10&lt;br /&gt;A  .23  2  12&lt;br /&gt;A  .67  1   9&lt;br /&gt;B  .2   3  13&lt;br /&gt;B  .3   4  15&lt;br /&gt;B  .45  5  16&lt;br /&gt;B  .78  5  13&lt;br /&gt;C  .04  0  10&lt;br /&gt;C  .15  0  11&lt;br /&gt;C  .56  1  12&lt;br /&gt;C  .7   2  12&lt;br /&gt;D  .34  5  10&lt;br /&gt;D  .6   5   9&lt;br /&gt;D  .7   8  10&lt;br /&gt;E  .2  12  20&lt;br /&gt;E  .34 15  20&lt;br /&gt;E  .56 13  15&lt;br /&gt;E  .8  17  20&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;proc genmod data=drug;&lt;br /&gt;class drug;&lt;br /&gt;model r/n=x drug / dist=binomial link=logit;&lt;br /&gt;estimate 'A vs E' drug 1 0 0 0 -1/exp;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc logistic data=drug;&lt;br /&gt;class drug/&lt;span style="font-weight: bold;"&gt;param=ref&lt;/span&gt;;&lt;br /&gt;model r/n=x drug;&lt;br /&gt;run;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;/* generates dummy variables coded as follows&lt;br /&gt;                         drug      A          1      0      0      0&lt;br /&gt;                                   B          0      1      0      0&lt;br /&gt;                                   C          0      0      1      0&lt;br /&gt;                                   D          0      0      0      1&lt;br /&gt;                                   E          0      0      0      0   */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;  proc logistic data=drug;&lt;br /&gt;class drug;&lt;br /&gt;model r/n=x drug;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* generates dummy variables coded as follows&lt;br /&gt;&lt;br /&gt;                         Class     Value         Design Variables&lt;br /&gt;&lt;br /&gt;                         drug      A          1      0      0      0&lt;br /&gt;                                   B          0      1      0      0&lt;br /&gt;                                   C          0      0      1      0&lt;br /&gt;                                   D          0      0      0      1&lt;br /&gt;                                   E         -1     -1     -1     -1&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;However, the results (Odds ratio) are going to be the same. Accessible help on writing contrast statements is &lt;a href="http://www.google.com/url?sa=t&amp;ct=res&amp;amp;cd=1&amp;url=https%3A%2F%2Fwww.atlas.uiuc.edu%2Fdata_stats%2Fresources%2Fsas%2FSAS_SPSS-contrasts.pdf&amp;amp;ei=b4EVRrbSM43IggSj_dHJCw&amp;usg=__qYXmvewr15GSajrzj2m1veukp9g=&amp;amp;sig2=G1qoiTKHYoSWTdrAN3u0mg"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-9125414598469078312?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/9125414598469078312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=9125414598469078312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/9125414598469078312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/9125414598469078312'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/04/correspondence-between-genmod-and.html' title='Correspondence between genmod and logistic'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3343453068300050064</id><published>2007-04-02T16:42:00.000-07:00</published><updated>2007-04-03T07:48:25.698-07:00</updated><title type='text'>Proc tabulate/proc report</title><content type='html'>I have been trying to learn these new tools.&lt;br /&gt;&lt;br /&gt;Here is a &lt;a href="http://www.laurenhaworth.com/publications/71-28.pdf"&gt;pdf&lt;/a&gt; with clear instructions and uses of both.&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;Some available options are ACROSS, ANALYSIS, CENTER, COLOR, COMPUTED, CSS, CV, DESCENDING, DISPLAY, EXCLUSIVE, F, FLOW, FORMAT, GROUP, ID, ITEMHELP, LEFT, MAX, MEAN, MEDIAN, MIN, MISSING, N, NMISS, NOPRINT, NOZERO, ORDER, P1, P10, P25, P5, P50, P75, P90, P95, P99, PAGE, PCTN, PCTSUM, PRELOADFMT, PRT, Q1, Q3, QRANGE, RANGE, RIGHT, SPACING, STD, STDERR, STYLE, SUM, SUMWGT, T, USS, VAR, WEIGHT, WGT, WIDTH.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3343453068300050064?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3343453068300050064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3343453068300050064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3343453068300050064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3343453068300050064'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/04/proc-tabulateproc-report.html' title='Proc tabulate/proc report'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3548299693641020354</id><published>2007-04-01T19:00:00.000-07:00</published><updated>2007-04-01T19:06:37.608-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macro ods output logistic regression'/><title type='text'>Macro to output only relevant results to ods</title><content type='html'>&lt;span style="font-size:85%;"&gt;/** following macro runs logistic regression and outputs the results from only the relevant variables to the html file. In this case, I am running regression with various variables but keeping age in all the models. Age is not the variable of interest. */&lt;br /&gt;&lt;br /&gt;%macro jncht(dataname,var1);&lt;br /&gt;title "Age and sex adjusted &amp;var1";&lt;br /&gt;ods select  OddsRatio ParameterEstimates;&lt;br /&gt;proc logistic data=&amp;dataname ;&lt;br /&gt;model jncht=&amp;var1 ahage ahsex ;&lt;br /&gt;ods output OddsRatios=orrr;&lt;br /&gt;ods output ParameterEstimates=Param;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;data param;&lt;br /&gt;set param;&lt;br /&gt;drop  DF  Estimate    StdErr;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc sort;  &lt;br /&gt;by variable;&lt;br /&gt;&lt;br /&gt;           data orrr;&lt;br /&gt;           set orrr;&lt;br /&gt;           variable=effect;&lt;br /&gt;           drop effect;&lt;br /&gt;proc sort;&lt;br /&gt;by variable;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt; data new;&lt;br /&gt;          merge param orrr;&lt;br /&gt;          by variable;&lt;br /&gt;          run;&lt;br /&gt;%let cuts=%SUBSTR(&amp;var1,1,4);&lt;br /&gt;&lt;br /&gt;ods html  select all;&lt;br /&gt;title " age and sex adjusted &amp;var1";&lt;br /&gt;          proc print data=new;&lt;br /&gt;          var variable OddsRatioEst LowerCL UpperCL ProbChiSq;&lt;br /&gt;where variable like "%NRBQUOTE(%)&amp;cuts%NRBQUOTE(%)";&lt;br /&gt;         run;&lt;br /&gt;ods html exclude all;&lt;br /&gt;proc datasets;&lt;br /&gt;delete param orrr new;&lt;br /&gt;%mend ;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Invocation of this macro.&lt;/span&gt;&lt;br /&gt;/*include the following statement in the beginning of the program*/&lt;br /&gt;ods html file ="%sysfunc&lt;br /&gt;(reverse(%sysfunc(substr(%sysfunc(reverse(%sysfunc(reverse(%scan(%sysfunc(reverse(%sysfunc(getoption(sysin)))),1,/))))),5)))).html"&lt;br /&gt;STYLE=MINIMAL;&lt;br /&gt;&lt;br /&gt;data...;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.;&lt;br /&gt;%jncht(trott1,&amp;wstci_)&lt;br /&gt;&lt;br /&gt;/*Where &amp;amp;wstci_ is a macro variable and equals 'wstci1 wstci2 wstci3'.&lt;span style="font-weight: bold;"&gt; */&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3548299693641020354?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3548299693641020354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3548299693641020354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3548299693641020354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3548299693641020354'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/04/macro-to-output-only-relevant-results.html' title='Macro to output only relevant results to ods'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3928924877598457592</id><published>2007-04-01T18:46:00.000-07:00</published><updated>2007-04-01T19:09:10.250-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wildcards matching variable macro variable'/><title type='text'>Wildcards in different situations</title><content type='html'>&lt;span style="font-family: courier new;font-size:85%;" &gt;This is a broad area to handle in one posting but here are few links that I found useful:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4 style="font-weight: normal; font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.ats.ucla.edu/stat/sas/code/perl_wildcard.htm"&gt; Matching with a wildcard using Perl regular expression &lt;/a&gt;A possible problem with this method is inability of this method to handle macro variables.&lt;/span&gt;&lt;/h4&gt;&lt;h4 style="font-weight: normal; font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://books.google.com/books?vid=ISBN1555446817&amp;id=wubfWLLuyI0C&amp;amp;amp;pg=PA63&amp;lpg=PA63&amp;amp;ots=EaOgdSOucm&amp;dq=sas+wildcard+like&amp;amp;sig=yXOYdx9sbco0A_bm2KAal7HhzAE"&gt;Matching with like and percent (%)&lt;/a&gt; It is used in the next post.&lt;/span&gt;&lt;/h4&gt;&lt;h4 style="font-weight: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a style="font-family: courier new;" href="http://www.stat.ncsu.edu/sas/samples/base/manyfiles.html"&gt;Using wildcards to read many files into one SAS data set&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/h4&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3928924877598457592?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3928924877598457592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3928924877598457592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3928924877598457592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3928924877598457592'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/04/wildcards-in-different-situations.html' title='Wildcards in different situations'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-1500240555160144141</id><published>2007-03-31T09:20:00.000-07:00</published><updated>2007-04-01T19:12:43.571-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='genmod logistic interaction dummy macro variable class'/><title type='text'>Interactions in logistic regression using proc genmod</title><content type='html'>&lt;span style="font-size:85%;"&gt;I have been trying to do logistic regression with interactions. Since this would have required a lot of dummy coding in proc logistic, I used &lt;a href="http://www2.stat.unibo.it/ManualiSas/stat/chap29.pdf"&gt;proc genmod&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;proc genmod;                                                      &lt;br /&gt;class ahsex(ref=first)  ah66a qtype  &amp;smok_   &amp;alco_;                                                        &lt;br /&gt;model jncht=  wstrs wstrs*ahsex ahsex ah66a  ahage     &amp;smok_   &amp;alco_ WLTHINDF QTYPE/ error=bin link=logit type3;&lt;br /&gt;run;                                                                                              &lt;br /&gt;&lt;br /&gt;Another way to encode the interaction term and the main effects would be using "&lt;/span&gt;&lt;span style="font-size:85%;"&gt;wstrs|ahsex". This equals &lt;/span&gt;&lt;span style="font-size:85%;"&gt;"wstrs wstrs*ahsex ahsex".&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;The ref option could be replaced with (ref="1") .  Specifying more than one REF= variable option in the CLASS statement&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; could be a &lt;a href="http://support.sas.com/techsup/unotes/SN/013/013510.html"&gt;problem&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In case you are wondering, &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&amp;smok_ refer to the macro variable I created earlier in the code as follows:&lt;br /&gt;%let &amp;amp;sm0k= smok1 smok2 smok3 smokm;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.sas.com/techsup/unotes/SN/013/013510.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-1500240555160144141?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/1500240555160144141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=1500240555160144141' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1500240555160144141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1500240555160144141'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/03/interactions-in-logistic-regression.html' title='Interactions in logistic regression using proc genmod'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-1622299770096242569</id><published>2007-03-21T09:04:00.000-07:00</published><updated>2007-03-21T09:07:31.733-07:00</updated><title type='text'>Find the number of observations in the dataset</title><content type='html'>I work with huge daatsets - more than 100,000 observations followed up for 20 years. In the process of merging datasets read in through macros, I have lost track of the number of observations.&lt;br /&gt;&lt;br /&gt;Following code gives the number of observations in the dataset - dataname:&lt;br /&gt;%let dsid=%sysfunc(open(dataname));&lt;br /&gt;%let num=%sysfunc(attrn(&amp;dsid,nobs));&lt;br /&gt;%let rc=%sysfunc(close(&amp;dsid));&lt;br /&gt;%put There are &amp;num observations in dataset dataname.;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;This is from the &lt;a href="http://support.sas.com/ctx/samples/index.jsp?sid=592"&gt;SAS samples&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-1622299770096242569?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/1622299770096242569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=1622299770096242569' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1622299770096242569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1622299770096242569'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/03/find-number-of-observations-in-dataset.html' title='Find the number of observations in the dataset'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3723292830023158865</id><published>2007-03-19T19:29:00.000-07:00</published><updated>2007-03-21T14:43:53.772-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sas proc reg regression increment standard deviation mean centered merge'/><title type='text'>Centering around mean or calculating standard deviation</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;data original;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;set original;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var=1; /*creates a constant variable*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;/*creates means ,standard deviation and no of obs and puts them in dataset called starwars which has only one observation*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;proc means data=original;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var ahbmi ah98 ah99 ah9900 ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;OUTPUT OUT=starwars MEAN=avbmi av98 av99 STD=stbmi stah98 stah99 N=nbmi n98 n99 ;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;run;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;data starwars;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set starwars;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var=1; /*creates constant variable for merging with original dataset*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;drop _freq_ _type_;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;data original ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;merge original starwars;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;by var;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;centerbmi=ahbmi-avbmi; /*centers bmi*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bmisd=ahbmi/stbmi;/*creates variable to do regression with each unit increment of standard deviation*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/**************Alternate way***************************/&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;data original;&lt;br /&gt;set original;&lt;br /&gt;proc means data=original;&lt;br /&gt;var ahbmi ah98 ah99 ah9900 hipcr;&lt;br /&gt;OUTPUT OUT=starwars MEAN=avbmi av98 av99 STD=stbmi stah98 stah99 N=nbmi n98 n99 ;&lt;br /&gt;run;&lt;br /&gt;&lt;/span&gt;&lt;pre  style="font-family:courier new;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;/*creates means ,standard deviation and no of obs and puts them in dataset called starwars which has only one observation*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;data _null_;&lt;br /&gt;set starwars;&lt;br /&gt;call symput("bmibar",avbmi); /*creates macro var bmibar that has the value of avbmi*/&lt;br /&gt;call symput("a98bar",av98);&lt;br /&gt;call symput("a99bar",av99);&lt;br /&gt;call symput("s98",stah98);&lt;br /&gt;call symput("s99",stah99);&lt;br /&gt;call symput("sbmi",stbmi);&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;%put mean of bmi is &amp;bmibar;&lt;br /&gt;%put mean of ah98 is &amp;a98bar;&lt;br /&gt;%put mean of ah99 is &amp;a99bar;&lt;br /&gt;&lt;br /&gt;data original;&lt;br /&gt;set original;&lt;br /&gt;ceterbmi=avbmi-&amp;bmibar;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; /*centers bmi*/&lt;br /&gt;bmisd=ahbmi/&amp;sbmi;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; /*creates variable to do regression with each unit increment of standard deviation */&lt;br /&gt;run;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/**************Alternate way***************************/&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/**************Standardized Coefficients***************************/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;proc reg;&lt;br /&gt;model dependent= independent1 independent2 independent3/stb;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;This gives standardized estimates i.e. when all variables in the&lt;br /&gt;models (including dependent variable) are standardized to zero&lt;br /&gt;mean and unit variance. Each coefficient indicates the number&lt;br /&gt;of SD change in the dependent variable with a SD change in the&lt;br /&gt;independent variable holding constant all other variables constant.&lt;br /&gt;This is useful to compare the relative importance of independent&lt;br /&gt;variables independent of the scales.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3723292830023158865?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3723292830023158865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3723292830023158865'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/03/centering-around-mean-or-calculating.html' title='Centering around mean or calculating standard deviation'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-6699580790393038828</id><published>2007-03-14T11:14:00.000-07:00</published><updated>2007-03-19T19:48:14.200-07:00</updated><title type='text'>Productivity tools for sas</title><content type='html'>Comparison of two SAS programs: Sometimes similar looking files lead to different results. Following programs help finding the difference.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scootersoftware.com/download.php"&gt;Beyond Compare&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.download.com/3001-2248_4-10619470.html"&gt;ExamDiffPro&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.prestosoft.com/images/screenshots/edpro_screen_text.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.prestosoft.com/images/screenshots/edpro_screen_text.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Extracting columns of results from output e.g.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_YtnCvlWJntA/RfhOQ8GhtJI/AAAAAAAAAC0/5DsrAhRMg2s/s1600-h/table1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_YtnCvlWJntA/RfhOQ8GhtJI/AAAAAAAAAC0/5DsrAhRMg2s/s320/table1.png" alt="" id="BLOGGER_PHOTO_ID_5041865835759645842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;without painful editing as&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_YtnCvlWJntA/RfhOqMGhtLI/AAAAAAAAADE/5sRR-J0ypCM/s1600-h/table2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_YtnCvlWJntA/RfhOqMGhtLI/AAAAAAAAADE/5sRR-J0ypCM/s200/table2.png" alt="" id="BLOGGER_PHOTO_ID_5041866269551342770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.textpad.com/download/index.html"&gt;TextPad&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.xemacs.org/Download/win32/"&gt;xemacs for windows&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-6699580790393038828?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/6699580790393038828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=6699580790393038828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6699580790393038828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6699580790393038828'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/03/productivity-tools-for-sas.html' title='Productivity tools for sas'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_YtnCvlWJntA/RfhOQ8GhtJI/AAAAAAAAAC0/5DsrAhRMg2s/s72-c/table1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-24937807645933787</id><published>2007-03-08T10:39:00.000-08:00</published><updated>2007-03-08T10:52:45.689-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delete sas comment macro'/><title type='text'>Prevent code from executing</title><content type='html'>My sas programs have a lot of code which I need intermittently but I don't need it to run everytime the program executes. Since, I need the code from time to time, I am reluctant to delete it.&lt;br /&gt;&lt;br /&gt;There are various ways to prevent code from executing:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;/*comment out using asterisk slash*/            pieces of code enclosed by asterisk slash are treated as comments by sas and ignored.&lt;/li&gt;&lt;li&gt;*comment using asterisk;                                pieces of code enclosed by asterisk and ';' are treated as comments and ignored by sas.   &lt;br /&gt;&lt;/li&gt;&lt;li&gt;%macro junk;  enclose code as a macro; %mend;   pieces of code enclosed as macro are ignored. This is extremely useful since method1 and 2 only work if there are no other comments in between. Junk can be replaced with any word.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;e.g.&lt;br /&gt;&lt;br /&gt;/* this is sample code */&lt;br /&gt;proc means;&lt;br /&gt;table age;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;/* this is second proc */&lt;br /&gt;proc univariate;&lt;br /&gt;var age;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If this code needs to be ignored as a whole, method 1 would generate a error and method 2 will be tedious. This kind of code can be prevented from executing as follows:&lt;br /&gt;&lt;br /&gt;%macro abcdg;&lt;br /&gt;/* this is sample code */&lt;br /&gt;proc means;&lt;br /&gt;table age;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;/* this is second proc */&lt;br /&gt;proc univariate;&lt;br /&gt;var age;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;%mend;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-24937807645933787?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/24937807645933787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=24937807645933787' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/24937807645933787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/24937807645933787'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/03/prevent-code-from-executing.html' title='Prevent code from executing'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-8711749076858074320</id><published>2007-03-05T06:35:00.001-08:00</published><updated>2007-03-05T06:41:20.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='missing data sas means nmiss'/><title type='text'>Find missing information</title><content type='html'>Missing information bugs me! Missing missing information bugs me more!!&lt;br /&gt;&lt;br /&gt;However, there is an easy way to find variables with missing information. This method can be used for both continuous and categorical variables. Try the following after changing the keywords in &lt;span style="color: rgb(204, 102, 204);"&gt;color&lt;/span&gt; with your data specific names.&lt;br /&gt;&lt;pre&gt;&lt;strong&gt;proc means data=&lt;span style="color: rgb(204, 51, 204);"&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;trott1&lt;/span&gt; &lt;/span&gt;NMISS &lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;N &lt;/strong&gt;&lt;/strong&gt;&lt;strong&gt;;&lt;br /&gt;var &lt;span style="color: rgb(204, 102, 204);"&gt;sbp dbp age smoking alcohol&lt;/span&gt;;&lt;br /&gt;run;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;More detailed information is available &lt;a href="http://www.ats.ucla.edu/stat/SAS/faq/nummiss_sas.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-8711749076858074320?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/8711749076858074320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=8711749076858074320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/8711749076858074320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/8711749076858074320'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/03/find-missing-information_05.html' title='Find missing information'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3506646916528721144</id><published>2007-01-07T04:32:00.000-08:00</published><updated>2007-01-07T09:11:22.239-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collapse dataset aggregate genmod logistic binomial poisson generate data random'/><title type='text'>Using Proc Genmod for logistic, poisson and log binomial regression</title><content type='html'>&lt;div style="text-align: justify;"&gt;PROC GENMOD is a procedure for fitting generalized linear models. This procedure is flexible and offers various advantages.&lt;br /&gt;&lt;br /&gt;Indicator variables do not have to be constructed in advance because it uses a class statement for specifying categorical (classification) variables.&lt;br /&gt;Interactions can be fitted by specified by using asterisk, for example, batch*gender. &lt;br /&gt;In some procedures, variables necessarily have to be numerical. However, in proc genmod, the variables (both outcome and explanatory) can be character.&lt;br /&gt;Proc genmod reports log likelihood ratio for each variable in the model.&lt;br /&gt;Because of the generalized nature, different models can be fitted with one procedure.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;data file11;&lt;br /&gt;/* generate data using random numbers. details &lt;a href="http://www2.sas.com/proceedings/sugi22/CODERS/PAPER74.PDF"&gt;here&lt;/a&gt;*/&lt;br /&gt;DO MINUTE=0 TO 1000 BY 1;&lt;br /&gt;X=UNIFORM (0);&lt;br /&gt;X1=UNIFORM (15452);&lt;br /&gt;X2=UNIFORM (29561);&lt;br /&gt;OUTPUT ;&lt;br /&gt;END;&lt;br /&gt;run;&lt;br /&gt;data filea;&lt;br /&gt;set file11;&lt;br /&gt;if x&gt;0.5 then gender=1;&lt;br /&gt;if x&lt;=0.5 then gender=0; if x1&gt;0.8 then emmig=1;&lt;br /&gt;if x1&lt;=0.8 then emmig=0; if x1&gt;0.8 then emmig1='yes';&lt;br /&gt;if x1&lt;=0.8 then emmig1='no'; if x2&gt;0.4 then cat=1;&lt;br /&gt;if x2&lt;=0.4 then cat=0;  id=_n_; /* following creates a &lt;a href="http://www.ats.ucla.edu/STAT/SAS/modules/collapse.htm"&gt;compressed/collapsed &lt;/a&gt;dataset (fam8)&lt;br /&gt;with the same information as original dataset&lt;a href="http://www.ats.ucla.edu/STAT/SAS/modules/collapse.htm"&gt;&lt;/a&gt;*/&lt;br /&gt;if cat=0 then do;&lt;br /&gt;if gender=1 and emmig=1 then index=1;&lt;br /&gt;if gender=0 and emmig=1 then index=2;&lt;br /&gt;if gender=1 and emmig=0 then index=3;&lt;br /&gt;if gender=0 and emmig=0 then index=4;&lt;br /&gt;end;&lt;br /&gt;else if cat=1 then do;&lt;br /&gt;if gender=1 and emmig=1 then index=5;&lt;br /&gt;if gender=0 and emmig=1 then index=6;&lt;br /&gt;if gender=1 and emmig=0 then index=7;&lt;br /&gt;if gender=0 and emmig=0 then index=8;&lt;br /&gt;end;&lt;br /&gt;PROC MEANS DATA=filea NWAY NOPRINT ;&lt;br /&gt;CLASS index gender emmig cat emmig1;&lt;br /&gt;VAR index ;&lt;br /&gt;OUTPUT OUT=fam8 SUM=number;&lt;br /&gt;RUN;&lt;br /&gt;&lt;br /&gt;data file;&lt;br /&gt;set fam8;&lt;br /&gt;drop _type_ number;&lt;br /&gt;numb=_freq_;&lt;br /&gt;id=_n_;&lt;br /&gt;&lt;br /&gt;/* Calculate odds ratio using logistic regression */&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;proc genmod data=file descending ;&lt;br /&gt;class cat ;&lt;br /&gt;freq numb; /* method to analyze aggregate data */&lt;br /&gt;model emmig1 = cat/ dist=binomial link=logit ;&lt;br /&gt;estimate 'Beta' cat 1 -1/ exp;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;/* Calculate risk ratio using log binomial regression */&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;proc genmod data=filea descending ;&lt;br /&gt;class cat ;&lt;br /&gt;model emmig = cat/ dist=binomial link=log ;&lt;br /&gt;estimate 'Beta' cat 1 -1/ exp;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;/* Calculate risk ratio using&lt;span style="font-family:monospace;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Poisson Regression with Robust Error Variance&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;*/&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:100%;"&gt;proc genmod data=filea ;&lt;br /&gt;class cat id;&lt;br /&gt;model emmig = cat/ dist=poisson link=log ;&lt;br /&gt;repeated subject = id/ type = unstr;&lt;br /&gt;estimate 'Beta' cat 1 -1/ exp;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;/*logic of using risk ratio &lt;span style="font-style: italic;"&gt;vs &lt;/span&gt;odds ratio and details of log-binomial and&lt;br /&gt;poisson regression is &lt;a href="http://www.ats.ucla.edu/STAT/SAS/faq/relative_risk.htm"&gt;here&lt;/a&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3506646916528721144?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3506646916528721144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3506646916528721144' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3506646916528721144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3506646916528721144'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2007/01/uses-of-proc-genmod.html' title='Using Proc Genmod for logistic, poisson and log binomial regression'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-9192260974930616969</id><published>2006-12-30T08:57:00.000-08:00</published><updated>2006-12-30T09:06:23.693-08:00</updated><title type='text'>Finding the number of times a threshold has exceeded cutoff</title><content type='html'>I was approached by a student who had a time series data (120 individual animals observed at 250 time points).  She want to find the following:&lt;br /&gt;&lt;br /&gt;1)How man times an animal's outcome has been above a threshold for 5, 6,7 ... j consecutive times?&lt;br /&gt;&lt;br /&gt;2) An animal can be above a threshold for 'j' consecutive times and then  go below it for 'n' consecutive time points and go above it for 'k'  consecutive time points . I would prefer this pattern to be counted distinctly and also as only once.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/*this solution was offered through SAS-L */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/*Generate test data */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  data test;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  do animal = 1 to 120;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;     do time = 1 to 250;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;        outcome = floor(10*ranuni(123) );&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;        output;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;        end;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;     end;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  run;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;br /&gt;/*First step is to create a variable indicating whether the threshold (3, for example) is exceeded*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  data step1 /*/ view=step1/*;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  set test;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  over = (outcome &gt; 3);&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  run;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;/* Next, reduce to one observation for each series of consecutives */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  data step2(drop = outcome) /* /view=step2 */;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  do consecutive = -1 by -1 until (last.over);&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;     set threshold;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;     by animal over notsorted;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;     end;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  run;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  proc freq data=step2;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  tables consecutive / nopercent;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  where over;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;  run;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-9192260974930616969?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/9192260974930616969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=9192260974930616969' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/9192260974930616969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/9192260974930616969'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/finding-number-of-times-threshold-has.html' title='Finding the number of times a threshold has exceeded cutoff'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-2234148194179503669</id><published>2006-12-30T08:29:00.000-08:00</published><updated>2006-12-30T08:57:36.437-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='symput macro highest observation SAS'/><title type='text'>Finding the largest observation</title><content type='html'>There might be many ways to do this. A &lt;span style="font-style: italic;"&gt;simple way &lt;/span&gt;would be to as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;data new;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Infile '/udd/n2man/epimarks/classmarks.txt';&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;    input roll 4. ExamDate MMDDYY10. @17 MidFinal $2. Marks 4.;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;obsno=_n_;&lt;br /&gt;/* creates a new variable obsno whose value is the same as observation number in the dataset */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;proc univariate;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var marks;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;run;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* see the observation number for the largest variable(s) in the output. Run the program again with following added*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;proc print;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;where obsno=15; /* 15 is the obsno from the output of proc univariate */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;A sophisticated way&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;data  new2;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;Infile '/udd/n2man/epimarks/classmarks.txt';&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;    input roll 4. ExamDate MMDDYY10. @17 MidFinal $2. Marks 4.;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;proc sort data =new2;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    by descending  marks;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;data _null_ ; /* null datasets only exist for the particular datastep where they are called */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    set new2 ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    If _n_=1 then call symput("IDNumber",Roll);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/* this creates a macro variable IDNumber whose value is the roll of the first observation which is the one with largest marks because of sorting*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    else stop;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;proc print data=new2;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    where Roll="&amp;IDnumber";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    format ExamDate WORDDATE18.;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    title "Student &amp;IDNumber Had the highest marks ";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;run;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-2234148194179503669?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/2234148194179503669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=2234148194179503669' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2234148194179503669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2234148194179503669'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/finding-largest-observation.html' title='Finding the largest observation'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-1737673234883775970</id><published>2006-12-30T08:25:00.000-08:00</published><updated>2006-12-30T08:29:09.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS redirect output log files'/><title type='text'>Redirecting sas log and output files</title><content type='html'>When sas program mal or mal.sas is run on unix, it would produce output files sql.log and sql.lst. It is possible to redirect these files as follows:&lt;br /&gt;&lt;br /&gt;    &lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;  sas mal.sas -log mallog1 -print mresults &amp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where mallog1 and mresults could be any valid Unix file names.  The ampersand (&amp;amp;) ensures that the sas program is run in the background (see earlier posts).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-1737673234883775970?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/1737673234883775970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=1737673234883775970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1737673234883775970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1737673234883775970'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/redirecting-sas-log-and-output-files.html' title='Redirecting sas log and output files'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-4000847587134385450</id><published>2006-12-25T21:36:00.000-08:00</published><updated>2006-12-25T21:40:20.527-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sas background unix ampersand'/><title type='text'>Running SAS jobs in background</title><content type='html'>&lt;p&gt;If you want to continue editing programs while SAS jobs run in the background, you can do that by placing an ampersand ("&amp;")  after program name.  For example: &lt;/p&gt;&lt;pre&gt;   sas myprog &amp;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-4000847587134385450?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/4000847587134385450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=4000847587134385450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4000847587134385450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4000847587134385450'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/running-sas-jobs-in-background.html' title='Running SAS jobs in background'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-2756826100148138073</id><published>2006-12-25T20:45:00.000-08:00</published><updated>2006-12-25T21:34:07.468-08:00</updated><title type='text'>Running SAS on UNIX  in Interactive mode</title><content type='html'>&lt;span style="color: rgb(192, 192, 192);"&gt;If you have got used to running SAS on Windows and now you are stuck with using SAS on UNIX, accept my sympathies ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Anyways, you can run SAS on UNIX with X11 tunelling. The X-Windows interface is similar in appearance and functionality to SAS for Windows. &lt;/span&gt;&lt;!--  &lt;p&gt;If you are using the X11 windowing system on a workstation, type the  following command at the UNIX command line prompt: &lt;p&gt;&lt;pre&gt;    sas &lt;/pre&gt;  &lt;p&gt;This will invoke a motif interface which provides three separate windows on your screen, one for commands, one for log messages and one for your command output. &lt;/p&gt; --&gt; &lt;p style="color: rgb(192, 192, 192);"&gt;  To do this you need two programs:&lt;/p&gt;&lt;ul style="color: rgb(51, 102, 102);"&gt;&lt;li style="color: rgb(51, 51, 51);"&gt;Putty or Secure CRT to connect to the UNIX server from Windows PC.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;An X-Windows server running on your computer.&lt;/span&gt;   &lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;span style="color: rgb(51, 102, 102);"&gt;Installing X-Windows server is easy.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    Download the program from&lt;/span&gt;&lt;/span&gt;&lt;a style="color: rgb(0, 0, 0);" href="http://www.itqb.unl.pt:1111/%7Ejcarrico/biomat/helpdesk/ftp/MIX/MIXfree.zip"&gt; &lt;/a&gt;&lt;a style="color: rgb(0, 0, 0);" href="http://www.itqb.unl.pt:1111/%7Ejcarrico/biomat/helpdesk/ftp/MIX/MIXfree.zip"&gt;here&lt;/a&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;. &lt;/span&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;Unzip this folder and run setup. You will get a window titled MicroImages X Server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="color: rgb(102, 102, 102);"&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;To run SAS, you will  need to configure it to allow XWindows "tunneling."&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="color: rgb(102, 102, 102);"&gt;    &lt;span style="color: rgb(0, 0, 0);"&gt;In SecureCRT, after starting click on Properties.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_YtnCvlWJntA/RZCwA-5oPKI/AAAAAAAAACY/i_sJgw8kT-g/s1600-h/secure1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_YtnCvlWJntA/RZCwA-5oPKI/AAAAAAAAACY/i_sJgw8kT-g/s400/secure1.jpg" alt="" id="BLOGGER_PHOTO_ID_5012699916194561186" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;    In the Properties window click on X11 tab and check Forward X11 Packets.&lt;br /&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_YtnCvlWJntA/RZCtVu5oPGI/AAAAAAAAAB4/F5W4W1TleKw/s1600-h/securecrt.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_YtnCvlWJntA/RZCtVu5oPGI/AAAAAAAAAB4/F5W4W1TleKw/s400/securecrt.gif" alt="" id="BLOGGER_PHOTO_ID_5012696974141963362" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    Connect to the server as usual and once connected type&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;sas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;After a pause of 4 seconds or so you would be able to see windows similar to what you see in Windows in the MicroImages X Server window.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(102, 102, 102);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_YtnCvlWJntA/RZCvQe5oPII/AAAAAAAAACI/ZGU5hfX0Gc8/s1600-h/secure2.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_YtnCvlWJntA/RZCvQe5oPII/AAAAAAAAACI/ZGU5hfX0Gc8/s400/secure2.gif" alt="" id="BLOGGER_PHOTO_ID_5012699082970905730" border="0" /&gt;&lt;/a&gt;&lt;span style="color: rgb(192, 192, 192);"&gt;The response of SAS in this environment can be a little slow.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-2756826100148138073?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/2756826100148138073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=2756826100148138073' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2756826100148138073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2756826100148138073'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/running-sas-on-unix-in-interactive-mode.html' title='Running SAS on UNIX  in Interactive mode'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_YtnCvlWJntA/RZCwA-5oPKI/AAAAAAAAACY/i_sJgw8kT-g/s72-c/secure1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-8072657304280690866</id><published>2006-12-25T18:19:00.000-08:00</published><updated>2006-12-25T21:27:37.263-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='format character number convert input'/><title type='text'>Convert character format to numeric format</title><content type='html'>In the previous post, if you use the substr function to tease out a number e.g. roll, the number is in  character format. Mathematical functions can not be performed on character variables.&lt;br /&gt;&lt;br /&gt;To convert  a variable from character to number format, there are following ways:&lt;br /&gt;&lt;br /&gt;rollno=roll*1;&lt;br /&gt;&lt;br /&gt;rollno=input(roll,4.0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-8072657304280690866?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/8072657304280690866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=8072657304280690866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/8072657304280690866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/8072657304280690866'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/convert-character-format-to-numeric.html' title='Convert character format to numeric format'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-2506894683176056562</id><published>2006-12-23T14:27:00.000-08:00</published><updated>2006-12-24T09:33:07.823-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dirty data management scan substr name functions sas'/><title type='text'>Parsing names using scan and substr functions</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:georgia;"&gt;Most of the times the raw data is received which requires processing before analysis. Recently, I assisted a researcher in analyzing this school data which was in the following format. The names in (brackets) is the maiden name. We have to find the everyone's name before marriage among other things.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;DATA dataset ;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;INPUT obs  1  name $ 2-45 idno $ 46-58 state $ 59 ;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;LENGTH obs 3 ;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;cards;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;6RED MURAR: DID NOT COMPLETE                09/2251/0018Â 2&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;7MARLA (WOHL) RANDH                         08/3559/0074Â 3&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;8RED (KRAKAS) MOHLK                         07/1452/0025Â 6&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;9MNIT K. RAJHU                              02/1758/0069Â 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;; RUN ;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/*notice the patterns which will be used to identify different variables*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;data grit;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set dataset;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;roll1= SCAN(idno,-1,'/');&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;roll= substr(roll1,1,4);&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;name1= SCAN(name,1,':');&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;first1= SCAN(name1,1,' ');&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;len_temp=indexc(name,'(');&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;if len_temp gt 0 then do;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;last1=scan(name,-1,'(');&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;last2=scan(last1,1,')');&lt;br /&gt;last3=compress(last2," ");&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;maiden=trim(first1)||" "||last3;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;end;&lt;br /&gt;if maiden=" " then maiden=trim(name1);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;proc print;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var roll name1 first1 last3 maiden;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;/*Pitfalls detailed &lt;a href="http://www.ocair.org/files/KnowledgeBase/HowTo/NameParsing2.asp"&gt;here&lt;/a&gt; */&lt;br /&gt;&lt;br /&gt;/* A very useful program is available &lt;a href="http://www.sconsig.com/sastips/tip00277.htm"&gt;here &lt;/a&gt;*/&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-2506894683176056562?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/2506894683176056562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=2506894683176056562' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2506894683176056562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2506894683176056562'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/parsing-names-using-scan-and-substr.html' title='Parsing names using scan and substr functions'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-4289130501284791394</id><published>2006-12-21T08:03:00.000-08:00</published><updated>2008-03-29T11:16:35.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ods sas unix postscript ps pdf graphics plot eps ps color  pslepscf pscolor'/><title type='text'>Elegant plotting without ODS</title><content type='html'>&lt;span style="font-style: italic;"&gt;One file for all the graphs&lt;/span&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;If you want to plot all the graphs in one file without using ODS, you should add the following line at the beginning of your program.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-size:9;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;filename&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;mygraph&lt;/span&gt; '&lt;span class="SpellE"&gt;usrroom.ps&lt;/span&gt;';&lt;br /&gt;&lt;span class="SpellE"&gt;goptions&lt;/span&gt; reset=global DEVICE=&lt;span class="SpellE"&gt;pscolor&lt;/span&gt; &lt;span class="SpellE"&gt;gsfmode&lt;/span&gt;=append &lt;span class="SpellE"&gt;gsfname&lt;/span&gt;=&lt;span class="SpellE"&gt;mygraph&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;**this would generate 3.ext - a postscript file that contains the &lt;span class="SpellE"&gt;boxplots&lt;/span&gt; ****;&lt;br /&gt;**note that ‘device=PSLEPSFC’ and filename mygraph 'usrroom.eps' ; would result in a eps file with colors**;&lt;br /&gt;**note that ‘device=&lt;span class="SpellE"&gt;pscolor&lt;/span&gt;’ would result in a graph with colors**;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;**if you do not use &lt;span class="SpellE"&gt;gsfname&lt;/span&gt; option, then &lt;span class="SpellE"&gt;sas&lt;/span&gt; would name the file by default &lt;span class="SpellE"&gt;sasgraph.ps&lt;/span&gt;. **;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;This would generate a single file &lt;span class="GramE"&gt;postscript(&lt;/span&gt;&lt;span class="SpellE"&gt;ps&lt;/span&gt;) file ‘&lt;span class="SpellE"&gt;usrroom.ps&lt;/span&gt;’ with all your plots . &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span class="GramE"&gt;&lt;u&gt;inserting&lt;/u&gt;&lt;/span&gt;&lt;u&gt; &lt;span class="SpellE"&gt;ps&lt;/span&gt; files in word&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Convert &lt;span class="SpellE"&gt;ps&lt;/span&gt; files to enhanced post script files for inserting into word documents in &lt;span class="SpellE"&gt;unix/hsph&lt;/span&gt; by typing&lt;br /&gt;&lt;span class="GramE"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="GramE"&gt;convert&lt;/span&gt; &lt;span class="SpellE"&gt;file.ps&lt;/span&gt; &lt;span class="SpellE"&gt;file.eps&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span class="GramE"&gt;&lt;u&gt;making&lt;/u&gt;&lt;/span&gt;&lt;u&gt; a &lt;span class="SpellE"&gt;pdf&lt;/span&gt; file from &lt;span class="SpellE"&gt;ps&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;br /&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;ps&lt;/span&gt;&lt;/span&gt; files can be made into a &lt;span class="SpellE"&gt;pdf&lt;/span&gt; file in &lt;span class="SpellE"&gt;unix/hsph&lt;/span&gt; by typing&lt;br /&gt;ps2pdf &lt;span class="SpellE"&gt;usrroom.ps&lt;/span&gt; &lt;span class="SpellE"&gt;graphs.pdf&lt;/span&gt; &lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;If you run the proc &lt;span class="SpellE"&gt;goptions&lt;/span&gt; or other advanced graphics would this line you would get the following prompt&lt;br /&gt;"No device name has been given--please enter device name:"&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;If you enter ‘&lt;span class="SpellE"&gt;ps&lt;/span&gt;’ or ‘&lt;span class="SpellE"&gt;pscolor&lt;/span&gt;’, you would get a postscript file. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span style="font-style: italic;"&gt;Separate file for each graph&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;If you want to make separate files for each graph it can be done by using &lt;span class="SpellE"&gt;goptions&lt;/span&gt; before each plot as shown in the following code &lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span class="GramE"&gt;&lt;u&gt;gif&lt;/u&gt;&lt;/span&gt;&lt;u&gt; files&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you want to plot separate file for each graph, you should add the following line at the beginning of your program.&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;filename&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;mygraph&lt;/span&gt; '/usr2/users/student/username/graphs';&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;goptions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; reset=global DEVICE=html &lt;span class="SpellE"&gt;gsfmode&lt;/span&gt;=append &lt;span class="SpellE"&gt;gsfname&lt;/span&gt;=&lt;span class="SpellE"&gt;mygraph&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;o:p&gt;T&lt;/o:p&gt;&lt;span class="GramE"&gt;his&lt;/span&gt; would generate gif files in files in folder /graphs. &lt;span class="GramE"&gt;gif&lt;/span&gt; files are easy to insert in word .&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;u&gt;pdf&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;u&gt; files&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you want to plot separate &lt;span class="SpellE"&gt;pdf&lt;/span&gt; file for each graph, you can add the following line at the beginning of &lt;u&gt;each proc &lt;span class="SpellE"&gt;gplot&lt;/span&gt; command&lt;/u&gt;.&lt;/p&gt;                    &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;filename&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;grafout&lt;/span&gt; '1.pdf';&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;goptions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; device=&lt;span class="SpellE"&gt;pdf&lt;/span&gt; &lt;span class="SpellE"&gt;gsfname&lt;/span&gt;=&lt;span class="SpellE"&gt;grafout&lt;/span&gt; &lt;span class="SpellE"&gt;gaccess&lt;/span&gt;=&lt;span class="SpellE"&gt;sasgastd&lt;/span&gt; &lt;span class="SpellE"&gt;gsfmode&lt;/span&gt;=replace;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;symbol&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; value=dot color=purple;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;proc&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;gplot&lt;/span&gt; data=weights;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;plot&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;bwt&lt;/span&gt;*age;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;run&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;**this would generate 1.pdf file that contains the plots of birth weight with age****;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;**However, SAS would automatically map colors to &lt;span class="SpellE"&gt;greyscale&lt;/span&gt; in this file**&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;A good guide on plotting (&lt;span class="SpellE"&gt;pdf&lt;/span&gt;) is available &lt;a href="http://www.math.canterbury.ac.nz/php/resources/compdocs/introsas.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-4289130501284791394?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/4289130501284791394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=4289130501284791394' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4289130501284791394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4289130501284791394'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/elegant-plotting-without-ods.html' title='Elegant plotting without ODS'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-6982427996341172249</id><published>2006-12-21T08:01:00.000-08:00</published><updated>2006-12-21T08:09:09.100-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinSCP client easy UNIX SAS'/><title type='text'>Using WinSCP to run SAS programs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_YtnCvlWJntA/RYqwDe5oPFI/AAAAAAAAABs/NCwXNBBkNTg/s1600-h/image003.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_YtnCvlWJntA/RYqwDe5oPFI/AAAAAAAAABs/NCwXNBBkNTg/s400/image003.jpg" alt="" id="BLOGGER_PHOTO_ID_5011011109283970130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;In the screenshot of WinSCP, Novell files are on the left, Unix files are on the right.&lt;span style=""&gt;  &lt;/span&gt;You can drag and drop to transfer files between systems.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Create a new SAS program file using      WinSCP.&lt;/b&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;ul style="margin-top: 0in;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;From       the top menu bar, choose &lt;u&gt;Files/Edit new file&lt;/u&gt;.&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Name       it &lt;i style=""&gt;your_pgm&lt;/i&gt;.sas.&lt;span style=""&gt;  &lt;/span&gt;(NB: No spaces allowed in Unix file       names.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Edit an existing file using WinSCP.&lt;/b&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;ul style="margin-top: 0in;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;Right       click on a file. You will see some preset Unix commands (Edit, Copy,       etc.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Choose       &lt;u&gt;Edit &lt;/u&gt;to edit the file&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;3 ways to execute SAS as a Unix      command through WinSCP&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;ul style="margin-top: 0in;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;From       the top menu bar, choose Commands/Terminal.&lt;span style=""&gt;  &lt;/span&gt;Type&lt;b style=""&gt; sas &lt;i style=""&gt;your_pgm&lt;/i&gt;.sas &lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;From       the top menu bar, choose Options/Command line.&lt;span style=""&gt;  &lt;/span&gt;In the command line box that appears at       the bottom of the window, type &lt;b style=""&gt;sas       &lt;i style=""&gt;your_pgm&lt;/i&gt;.sas&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Set       up a custom command, as described below&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Add a SAS command to the custom menu.&lt;/b&gt;      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;ul style="margin-top: 0in;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;Right       click anywhere on the Unix side of the window.&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Choose       &lt;u&gt;Custom Commands/Customize/Add&lt;/u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Enter       &lt;b style=""&gt;SAS &lt;/b&gt;in the &lt;u&gt;Description&lt;/u&gt;       box.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Enter       &lt;b style=""&gt;sas&lt;/b&gt; “!”&lt;span style=""&gt;  &lt;/span&gt;in the &lt;u&gt;Custom Command&lt;/u&gt; box&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;The       command SAS will be added to the &lt;u&gt;Custom Commands&lt;/u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Some useful commands at HSPH. (&lt;/b&gt;If you      set them up as Custom Commands, you won’t have to remember them.)&lt;b style=""&gt;&lt;u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;&lt;u&gt;&lt;o:p&gt;&lt;span style="text-decoration: none;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;table class="MsoTableGrid" style="margin-left: 1in; border-collapse: collapse;" border="0" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.7in;" valign="top" width="259"&gt;   &lt;p class="MsoNormal"&gt;Description (becomes the menu choice)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.45in;" valign="top" width="235"&gt;   &lt;p class="MsoNormal"&gt;Command (this format for custom commands uses “!” to refer   to the file you clicked)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.7in;" valign="top" width="259"&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;SAS&lt;/b&gt;&lt;i style=""&gt; [Version 9]&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.45in;" valign="top" width="235"&gt;   &lt;p class="MsoNormal"&gt;sas “!”&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.7in;" valign="top" width="259"&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;SAS8 &lt;/b&gt;&lt;i style=""&gt;[In case you need V8]&lt;/i&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.45in;" valign="top" width="235"&gt;   &lt;p class="MsoNormal"&gt;sas8 “!”&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.7in;" valign="top" width="259"&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;mpage&lt;/b&gt;&lt;i style=""&gt; [multi-page print in the Microlab to   printer L17a (2 pages on one side)]*&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.45in;" valign="top" width="235"&gt;   &lt;p class="MsoNormal"&gt;mpage –Pmlab58 -2 “!”&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.7in;" valign="top" width="259"&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;lp&lt;/b&gt; &lt;i style=""&gt;[stream print to printer LL17a in Microlab]*&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.45in;" valign="top" width="235"&gt;   &lt;p class="MsoNormal"&gt;lp “!”&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.7in;" valign="top" width="259"&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;SAS Sudaan&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 2.45in;" valign="top" width="235"&gt;   &lt;p class="MsoNormal"&gt;sas8 -path /usr/local2/sudaan90/sas-callable "!"&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;*For best results, set “options linesize=78;” in your SAS program.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Run the SAS program using the custom SAS      command&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;ul style="margin-top: 0in;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;Click       the SAS program file&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Choose       SAS from Custom Commands&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Select       SAS &lt;i style=""&gt;your_pgm&lt;/i&gt;.sas&lt;span style=""&gt;  &lt;/span&gt;and execute&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Managing your SAS session&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;ul style="margin-top: 0in;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;Use       Edit to examine .log and .lst files&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Use       mpage to print .sas, .log, and .lst files&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;If       SAS is installed on your PC, consider using it to write your programs       using the enhanced SAS editor.&lt;span style=""&gt;        &lt;/span&gt;Drag and drop your program from the PC side of the window to the       Unix side.&lt;span style=""&gt;  &lt;/span&gt;(Be sure to save the       editor contents before you do so).&lt;span style=""&gt;        &lt;/span&gt;Execute the program using one of the methods, above. &lt;span style=""&gt; &lt;/span&gt;Drag and drop your .log file back to PC       SAS for viewing in color.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;This page was created by Amy Cohen.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-6982427996341172249?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/6982427996341172249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=6982427996341172249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6982427996341172249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6982427996341172249'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/using-winscp-to-run-sas-programs.html' title='Using WinSCP to run SAS programs'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_YtnCvlWJntA/RYqwDe5oPFI/AAAAAAAAABs/NCwXNBBkNTg/s72-c/image003.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-2607275294660573777</id><published>2006-12-21T07:59:00.000-08:00</published><updated>2006-12-21T08:09:38.028-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log file line number easy nl error SAS unix'/><title type='text'>Reading log files</title><content type='html'>Sometimes SAS error log would show the line number. Simple text editors like &lt;span class="SpellE"&gt;pico&lt;/span&gt; and text readers such as less or more do not show the line number. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_YtnCvlWJntA/RYqvZO5oPCI/AAAAAAAAABI/5ZDRusIOjfM/s1600-h/image002.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_YtnCvlWJntA/RYqvZO5oPCI/AAAAAAAAABI/5ZDRusIOjfM/s400/image002.jpg" alt="" id="BLOGGER_PHOTO_ID_5011010383434497058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We can use &lt;span class="SpellE"&gt;nl&lt;/span&gt; (number line&lt;span class="GramE"&gt;)&lt;span style=""&gt;  &lt;/span&gt;command&lt;/span&gt; in such situation. If the file is big, to make the file the readable through scrolling, pipe can be used.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_YtnCvlWJntA/RYqvje5oPDI/AAAAAAAAABQ/BjSglrboeLw/s1600-h/image004.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_YtnCvlWJntA/RYqvje5oPDI/AAAAAAAAABQ/BjSglrboeLw/s400/image004.jpg" alt="" id="BLOGGER_PHOTO_ID_5011010559528156210" border="0" /&gt;&lt;/a&gt;This would be the output.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_YtnCvlWJntA/RYqvr-5oPEI/AAAAAAAAABY/xwKsU6VlXaM/s1600-h/image006.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_YtnCvlWJntA/RYqvr-5oPEI/AAAAAAAAABY/xwKsU6VlXaM/s400/image006.jpg" alt="" id="BLOGGER_PHOTO_ID_5011010705557044290" border="0" /&gt;&lt;/a&gt;The default behavior of &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;code&gt;&lt;span style="font-size:10;"&gt;nl&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt; is to skip blank lines, as shown above. The treatment of blank lines can be modified with the &lt;code&gt;&lt;span style="font-size:10;"&gt;-b&lt;/span&gt;&lt;/code&gt; switch. Some &lt;code&gt;&lt;span style="font-size:10;"&gt;-b&lt;/span&gt;&lt;/code&gt; options are &lt;code&gt;&lt;span style="font-size:10;"&gt;-&lt;span class="SpellE"&gt;ba&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; (number all lines), &lt;code&gt;&lt;span style="font-size:10;"&gt;-&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;bt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; (number only text lines -- the default behavior)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-2607275294660573777?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/2607275294660573777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=2607275294660573777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2607275294660573777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2607275294660573777'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/reading-log-files.html' title='Reading log files'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_YtnCvlWJntA/RYqvZO5oPCI/AAAAAAAAABI/5ZDRusIOjfM/s72-c/image002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-6199427702615111354</id><published>2006-12-21T07:55:00.000-08:00</published><updated>2006-12-21T08:10:12.313-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sas unix hsph run program batch mode'/><title type='text'>Running SAS on Unix</title><content type='html'>&lt;p&gt;The format of the command to run SAS is:&lt;/p&gt;  &lt;p&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;em&gt;hsph&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;em&gt;% &lt;span class="SpellE"&gt;sas&lt;/span&gt; filename&lt;/em&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;SAS would print the log file in &lt;span class="SpellE"&gt;filename.log&lt;/span&gt; and the results in &lt;span class="SpellE"&gt;filename.lst&lt;/span&gt;.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;Following is a sample &lt;span class="SpellE"&gt;sas&lt;/span&gt; program in &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;unix&lt;/span&gt;&lt;/span&gt; is &lt;/p&gt;            &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;options&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;pagesize&lt;/span&gt;=59 &lt;span class="SpellE"&gt;ls&lt;/span&gt;=64;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;libname&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; new '.'; ** sets the library to the directory in which the program resides**&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; ex;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="SpellE"&gt;&lt;span style=""&gt;infile&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; '/usr2/users/student/mkaushik/la/tumor' TRUNCOVER;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;/** reads the .txt file. Note the way file is referenced using backslash&lt;span class="GramE"&gt;.*&lt;/span&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;                  &lt;p class="MsoNormal"&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;input&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; id treat y;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;proc&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; print;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;run&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;proc&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;genmod&lt;/span&gt; ;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span class="GramE"&gt;class&lt;/span&gt; treat;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span class="GramE"&gt;model&lt;/span&gt; y=treat/dist=binomial link=&lt;span class="SpellE"&gt;logit&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;ESTIMATE '&lt;span class="SpellE"&gt;thiopeta&lt;/span&gt; vs. Placebo' treat&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; 1 -1 / e exp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;run&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;This program can be written using text editors such as &lt;a href="http://people.hsph.harvard.edu/%7Emkaushik/How_to_use_a_text_editor_in_Unix.htm"&gt;&lt;span class="SpellE"&gt;pico&lt;/span&gt;&lt;/a&gt;, &lt;span class="SpellE"&gt;emacs&lt;/span&gt; or &lt;span class="GramE"&gt;vi&lt;/span&gt;. Alternatively, it can be written in notepad in windows and then transferred to UNIX account using &lt;span class="SpellE"&gt;WinSCP&lt;/span&gt;. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;You can download tumor from &lt;a href="http://people.hsph.harvard.edu/%7Emkaushik/tumor"&gt;here&lt;/a&gt; and transfer the file to your UNIX account.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-6199427702615111354?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/6199427702615111354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=6199427702615111354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6199427702615111354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6199427702615111354'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/running-sas-on-unix.html' title='Running SAS on Unix'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-1301590926660832770</id><published>2006-12-21T07:22:00.000-08:00</published><updated>2006-12-21T07:54:40.536-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aggregate analysis 2x2 tables chi square proportions frequency'/><title type='text'>Aggregate analysis in SAS</title><content type='html'>&lt;p&gt;If there are aggregate data rather than individual data, analysis in SAS is    less intuitive compared to STATA.&lt;/p&gt; &lt;p&gt;/* the aim of this analysis is to assess if the proportion of infection is    changing across different years */&lt;/p&gt; &lt;p&gt;data xtrct;&lt;br /&gt;input yr inf mech upgr other;/*infection has number of infection patients */&lt;/p&gt; &lt;p&gt;cards;&lt;br /&gt;2000 12 7 0 40&lt;br /&gt;2001 10 7 1 52&lt;br /&gt;2002 34 13 4 24&lt;br /&gt;2003 30 27 6 21&lt;br /&gt;;&lt;/p&gt;  &lt;p&gt;/* We need to convert this wide data set into long dataset*/&lt;br /&gt;data trite;&lt;br /&gt;set xtrct;&lt;br /&gt;ninf=mech+upgr+other; /*total number of non infection patients */&lt;br /&gt;ARRAY a(1:2) inf ninf;&lt;br /&gt;DO t = 1 to 2 ;&lt;br /&gt;num= a(t) ;&lt;br /&gt;indicinf=t; /*indicator if num represents infections or non infections */&lt;br /&gt;OUTPUT ;&lt;br /&gt;END ; &lt;/p&gt; &lt;p&gt;proc print;&lt;br /&gt;run;&lt;/p&gt; &lt;p&gt;/* The data table should be as follows. Note num corresponds to number of cases    with infection and without infection.*/&lt;/p&gt; &lt;table border="0"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;Obs&lt;/td&gt;     &lt;td&gt;yr&lt;/td&gt;     &lt;td&gt;inf&lt;/td&gt;     &lt;td&gt;mech&lt;/td&gt;     &lt;td&gt;upgr&lt;/td&gt;     &lt;td&gt;other&lt;/td&gt;     &lt;td&gt;ninf&lt;/td&gt;     &lt;td&gt;inf&lt;/td&gt;     &lt;td&gt;infi&lt;/td&gt;     &lt;td&gt;num&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;2000&lt;/td&gt;     &lt;td&gt;12&lt;/td&gt;     &lt;td&gt;7&lt;/td&gt;     &lt;td&gt;0&lt;/td&gt;     &lt;td&gt;40&lt;/td&gt;     &lt;td&gt;47&lt;/td&gt;     &lt;td&gt;12&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;12&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;2&lt;/td&gt;     &lt;td&gt;2000&lt;/td&gt;     &lt;td&gt;12&lt;/td&gt;     &lt;td&gt;7&lt;/td&gt;     &lt;td&gt;0&lt;/td&gt;     &lt;td&gt;40&lt;/td&gt;     &lt;td&gt;47&lt;/td&gt;     &lt;td&gt;12&lt;/td&gt;     &lt;td&gt;2&lt;/td&gt;     &lt;td&gt;47&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;3&lt;/td&gt;     &lt;td&gt;2001&lt;/td&gt;     &lt;td&gt;10&lt;/td&gt;     &lt;td&gt;7&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;52&lt;/td&gt;     &lt;td&gt;60&lt;/td&gt;     &lt;td&gt;10&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;10&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;4&lt;/td&gt;     &lt;td&gt;2001&lt;/td&gt;     &lt;td&gt;10&lt;/td&gt;     &lt;td&gt;7&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;52&lt;/td&gt;     &lt;td&gt;60&lt;/td&gt;     &lt;td&gt;10&lt;/td&gt;     &lt;td&gt;2&lt;/td&gt;     &lt;td&gt;60&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;5&lt;/td&gt;     &lt;td&gt;2002&lt;/td&gt;     &lt;td&gt;34&lt;/td&gt;     &lt;td&gt;13&lt;/td&gt;     &lt;td&gt;4&lt;/td&gt;     &lt;td&gt;24&lt;/td&gt;     &lt;td&gt;41&lt;/td&gt;     &lt;td&gt;34&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;34&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;6&lt;/td&gt;     &lt;td&gt;2002&lt;/td&gt;     &lt;td&gt;34&lt;/td&gt;     &lt;td&gt;13&lt;/td&gt;     &lt;td&gt;4&lt;/td&gt;     &lt;td&gt;24&lt;/td&gt;     &lt;td&gt;41&lt;/td&gt;     &lt;td&gt;34&lt;/td&gt;     &lt;td&gt;2&lt;/td&gt;     &lt;td&gt;41&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;7&lt;/td&gt;     &lt;td&gt;2003&lt;/td&gt;     &lt;td&gt;30&lt;/td&gt;     &lt;td&gt;27&lt;/td&gt;     &lt;td&gt;6&lt;/td&gt;     &lt;td&gt;21&lt;/td&gt;     &lt;td&gt;54&lt;/td&gt;     &lt;td&gt;30&lt;/td&gt;     &lt;td&gt;1&lt;/td&gt;     &lt;td&gt;30&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;8&lt;/td&gt;     &lt;td&gt;2003&lt;/td&gt;     &lt;td&gt;30&lt;/td&gt;     &lt;td&gt;27&lt;/td&gt;     &lt;td&gt;6&lt;/td&gt;     &lt;td&gt;21&lt;/td&gt;     &lt;td&gt;54&lt;/td&gt;     &lt;td&gt;30&lt;/td&gt;     &lt;td&gt;2&lt;/td&gt;     &lt;td&gt;54&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p&gt; /* To assess the proportion of patients with infections is same over the 3 year period */&lt;br /&gt;&lt;/p&gt; proc freq order=data;&lt;br /&gt;title3 '(Two one-way tables followed by a 2x2 table)';&lt;br /&gt;table yr*indicinf / chisq;&lt;br /&gt;weight num;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;******************************************************************************&lt;br /&gt;The output is &lt;a href="http://people.hsph.harvard.edu/%7Emkaushik/output.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-1301590926660832770?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/1301590926660832770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=1301590926660832770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1301590926660832770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1301590926660832770'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/aggregate-analysis-in-sas.html' title='Aggregate analysis in SAS'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-107492575022304376</id><published>2006-12-21T07:03:00.000-08:00</published><updated>2006-12-21T07:20:18.329-08:00</updated><title type='text'>Create a format library from SAS dataset</title><content type='html'>To create SAS format library, SAS requires a datset in following format and with some of these variables.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_YtnCvlWJntA/RYqkJO5oO_I/AAAAAAAAAAc/ltRaxelajZg/s1600-h/try2.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_YtnCvlWJntA/RYqkJO5oO_I/AAAAAAAAAAc/ltRaxelajZg/s400/try2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5010998013928684530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To create a format or informat from a dataset using the CNTLIN option of PROC FORMAT, you need atleast the following variables in the &lt;br /&gt;&lt;br /&gt;FMTNAME – Contains name of format or informat to be created&lt;br /&gt;START   – The value of the variable that we want to be formatted&lt;br /&gt;LABEL   - The variable containing the format value we want displayed..&lt;br /&gt;&lt;br /&gt;There are many optional variables (see online documentation for complete list), the most useful of which is&lt;br /&gt;&lt;br /&gt;TYPE - character variable that indicates the type of format. Possible values are&lt;br /&gt;C   character format&lt;br /&gt;I   numeric informat&lt;br /&gt;J   character informat&lt;br /&gt;N   numeric format (excluding pictures)&lt;br /&gt;P   picture format&lt;br /&gt;&lt;br /&gt;The CNTLIN dataset must have these characteristics:&lt;br /&gt;&lt;br /&gt;    * For both numeric and character formats, the data set must contain the variables FMTNAME, START, and LABEL. The remaining variables are not required.&lt;br /&gt;    * If you are creating a character format, a character informat, or a PICTURE statement format, you must specify a TYPE variable with the value that indicates the type of informat or format you are creating.&lt;br /&gt;    * If range values are to be noninclusive, the variables SEXCL and EEXCL must each have a value of Y. Inclusion is the default.&lt;br /&gt;&lt;br /&gt;You can create more than one format from an input control data set if the observations for each format are grouped together.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Following is the way to create a format from a dataset:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_YtnCvlWJntA/RYqkWe5oPAI/AAAAAAAAAAk/fB2I4dHFA8g/s1600-h/try.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_YtnCvlWJntA/RYqkWe5oPAI/AAAAAAAAAAk/fB2I4dHFA8g/s400/try.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5010998241561951234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*************************************SAS CODE *************************************/&lt;br /&gt;options nodate pageno=1 linesize=80 pagesize=60;&lt;br /&gt;libname manas '/udd/n2man/tkk';&lt;br /&gt;libname library '/udd/n2man/'; /* creates a format library in the location /udd/n2man/ */&lt;br /&gt;/* READ THE ORIGINAL DATASET */&lt;br /&gt;/* VARIABLE DIAGCO CONTAINS THE VALUES TO WHICH A FORMAT (IN VARIABLE RISK) SHOULD BE ASSIGNED */&lt;br /&gt;data dummy;&lt;br /&gt;infile '/udd/n2man/tkk/surgpro.txt' missover;&lt;br /&gt;                  input diagco $ risk desc $;&lt;br /&gt;KEEP diagco risk;&lt;br /&gt;length diagco $8;&lt;br /&gt;run;&lt;br /&gt;proc sort data=sample; by risk diagco;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;data new;&lt;br /&gt;set dummy;&lt;br /&gt;start =diagco; /* CREATE NEW VARIABLES NEEDED TO MAKE THE FORMAT */&lt;br /&gt;label=risk;    /* CREATE NEW VARIABLES NEEDED TO MAKE THE FORMAT */&lt;br /&gt;/* to make a format from a range of values include the following */&lt;br /&gt;/* end= endrange; *here values from start-endrange will be assigned */&lt;br /&gt;/* a value */&lt;br /&gt;fmtname='$random';&lt;br /&gt;/* CREATES THE FORMAT NAME. IN THIS CASE ALL VARIABLES NEED TO HAVE THE SAME FORMAT */&lt;br /&gt;/* format names can also be in the dataset but in this dataset they had to be created */&lt;br /&gt;&lt;br /&gt;PROC SORT DATA = new OUT = FMT NODUPKEY;&lt;br /&gt;BY START;&lt;br /&gt;/* removes duplicate values of start that should only one label. Having two labels for the same value can be dangerous */&lt;br /&gt;&lt;br /&gt;proc sql;&lt;br /&gt;  create table fmt as&lt;br /&gt;  select distinct start, label, fmtname&lt;br /&gt;  from new;&lt;br /&gt;quit;&lt;br /&gt;data finalfmt;&lt;br /&gt;set fmt;&lt;br /&gt;/**** This step converts the dataset fmt to format library */&lt;br /&gt;PROC FORMAT LIB=library fmtlib CNTLIN=finalFMT;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;/*********************************************************************************/&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_YtnCvlWJntA/RYqlP-5oPBI/AAAAAAAAAAs/fhhMpTe4OTg/s1600-h/grit3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_YtnCvlWJntA/RYqlP-5oPBI/AAAAAAAAAAs/fhhMpTe4OTg/s400/grit3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5010999229404429330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have used/copied some segments from http://www.uchsc.edu/coho/SAS_Uers/The%20Many%20Ways%20to%20use%20Formats.doc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-107492575022304376?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/107492575022304376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=107492575022304376' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/107492575022304376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/107492575022304376'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/create-format-library-from-sas-dataset.html' title='Create a format library from SAS dataset'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_YtnCvlWJntA/RYqkJO5oO_I/AAAAAAAAAAc/ltRaxelajZg/s72-c/try2.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-7297842902298744780</id><published>2006-12-19T13:05:00.000-08:00</published><updated>2006-12-19T13:06:29.746-08:00</updated><title type='text'>Reading CSV files in SAS on UNIX</title><content type='html'>Each individual Excell work sheet can be converted into CSV or tab delimited files for being read in SAS.&lt;br /&gt;&lt;br /&gt;CSV files are in following format (note that commas separate different data points). This format is especially suitable if you have missing data.&lt;br /&gt;&lt;br /&gt;12,10,34&lt;br /&gt;6,9,0&lt;br /&gt;78,89,46&lt;br /&gt;2,3,2&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;To read csv files, use one of the following statements&lt;br /&gt;&lt;br /&gt;data new;&lt;br /&gt;infile '/usr2/users/student/mkaushik/shh/data1.csv' dsd;/* change the location of the file */&lt;br /&gt;INPUT rake note pgg ; /* these are variable names of your choice*/ &lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;data new;&lt;br /&gt;infile '/usr2/users/student/mkaushik/shh/data1.csv' delimiter=','; /* change the location of the file */&lt;br /&gt;INPUT rake note pgg ; /* these are variable names of your choice*/ &lt;br /&gt;run;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-7297842902298744780?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/7297842902298744780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=7297842902298744780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/7297842902298744780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/7297842902298744780'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/reading-csv-files-in-sas-on-unix.html' title='Reading CSV files in SAS on UNIX'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-4826931948031390557</id><published>2006-12-19T12:59:00.000-08:00</published><updated>2006-12-19T18:53:51.601-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS macro unix table 1 analysis'/><title type='text'>Table 1 Analysis Macro</title><content type='html'>I found this &lt;a href="http://www.nesug.org/html/Proceedings/nesug04/ap/ap15.pdf"&gt;great macro &lt;/a&gt;for Table 1 analysis. This macro could be polished further but it works as is and is quite helpful.&lt;br /&gt;&lt;br /&gt;Channing Labs have their own macro for Table 1 analysis but it adjusts for age which is not required in all analysis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-4826931948031390557?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/4826931948031390557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=4826931948031390557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4826931948031390557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4826931948031390557'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/table-1-analysis-macro.html' title='Table 1 Analysis Macro'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-435957094607124623</id><published>2006-12-18T19:20:00.000-08:00</published><updated>2006-12-19T17:48:13.313-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Indicator dummy variables statistics data manipulation analysis SAS UNIX'/><title type='text'>Making Indicator(dummy) variables</title><content type='html'>Following code can be used to make indicator variables.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Method 1&lt;/span&gt;&lt;br /&gt;if state1 ne 20 &amp; status ne 4 &amp; sex ne .;&lt;br /&gt;else if state1 in (1,3,4,19) then reg=1;      /* Bread basket  */&lt;br /&gt;else if state1 in (8,16) then reg=2;          /* maharashtraAP */&lt;br /&gt;else if state1 in (9,10,12,13,17) then reg=3; /* bimaru states */&lt;br /&gt;else if state1 in (5,11,21) then reg=5;       /* north eastWB  */&lt;br /&gt;else if state1 in (2) then reg=6;             /* Delhi         */&lt;br /&gt;else if state1 =. then reg=7;                 /* Missing       */&lt;br /&gt;&lt;br /&gt; ARRAY dummys {*} 3.  reg_1 - reg_7;&lt;br /&gt; &lt;br /&gt;  DO i=1 TO 7;                        &lt;br /&gt;    dummys(i) = 0;&lt;br /&gt;  END;&lt;br /&gt;  dummys( reg  ) = 1;&lt;br /&gt;&lt;br /&gt;This is similar to the method given &lt;a href="http://www.ciser.cornell.edu/FAQ/SAS/dummy_variables.shtml"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Method 2&lt;/span&gt;&lt;br /&gt;/* if variable values start from some arbitrary level */&lt;br /&gt;/* following makes indicator for years                */&lt;br /&gt;/* Here year values can be from 1988 to 2000          */&lt;br /&gt;&lt;br /&gt; ARRAY dummyb {1988:2000} 3.  bat_1 - bat_13;&lt;br /&gt;&lt;br /&gt;  DO i=1988 TO 2000;&lt;br /&gt;    dummyb(i) = 0;   &lt;br /&gt;  dummyb(i) =(year=i); &lt;br /&gt;  END;&lt;br /&gt;&lt;br /&gt;Macros for creating indicator (dummy) variables are available from &lt;a href="http://euclid.psych.yorku.ca/ftp/sas/vcd/macros/dummy.sashttp://euclid.psych.yorku.ca/ftp/sas/vcd/macros/dummy.sas"&gt;1&lt;/a&gt;.&lt;br /&gt;and &lt;a href="http://listserv.uga.edu/cgi-bin/wa?A2=ind0004d&amp;L=sas-l&amp;D=0&amp;P=38058"&gt;SAS-L archives &lt;br /&gt;&lt;/a&gt;Thanks for the comments Amy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-435957094607124623?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/435957094607124623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=435957094607124623' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/435957094607124623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/435957094607124623'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/following-code-can-be-used-to-make.html' title='Making Indicator(dummy) variables'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-4049886728866695981</id><published>2006-12-18T19:16:00.000-08:00</published><updated>2006-12-18T19:22:54.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sas unix excel data manipulation ods'/><title type='text'>Exporting a SAS dataset to Microsoft Excel</title><content type='html'>There are atleast two ways to export a SAS dataset to Microsoft Excel.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Proc Export&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PROC EXPORT DATA=datasetname&lt;br /&gt;            OUTFILE="/usr2/users/student/mkaushik/ names9900.csv"&lt;br /&gt;            DBMS=csv&lt;br /&gt;            REPLACE;&lt;br /&gt;delimiter=','; */&lt;br /&gt;RUN;&lt;br /&gt;&lt;br /&gt;The program (say atlantis) that includes this, should be submitted with the -noterminal option to  i.e.:&lt;br /&gt;&lt;br /&gt;sas atlantis -noterminal&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ODS&lt;/span&gt;&lt;br /&gt;ODS html FILE='/usr2/users/student/mkaushik/AIIMS/becker/try2.xls';&lt;br /&gt;              PROC PRINT DATA =&amp;dataset NOOBS;&lt;br /&gt;              RUN;&lt;br /&gt;            ODS html CLOSE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Use it when a few observations need to be extracted and sent it for review, additional data entry, data confirmation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-4049886728866695981?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/4049886728866695981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=4049886728866695981' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4049886728866695981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/4049886728866695981'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/exporting-sas-dataset-to-microsoft.html' title='Exporting a SAS dataset to Microsoft Excel'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-2571162210461778545</id><published>2006-12-18T19:15:00.000-08:00</published><updated>2006-12-18T19:23:35.815-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS unix data manipulation percentiles'/><title type='text'>Calculating percentiles in SAS</title><content type='html'>Following code can be used to find the percentiles.&lt;br /&gt;&lt;br /&gt;proc univariate data=food noprint;&lt;br /&gt;var omega sat;&lt;br /&gt;output out=pctl pctlpts=20 40 60 80 pctlpre=omega sat;&lt;br /&gt;run;&lt;br /&gt;proc print data=pctl;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Output would be in the following format&lt;br /&gt;omega20 omega40 omega60 omega80 sat20 sat40 sat60 sat80&lt;br /&gt;&lt;br /&gt;(from http://www.ats.ucla.edu/STAT/sas/faq/percentiles.htm)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-2571162210461778545?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/2571162210461778545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=2571162210461778545' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2571162210461778545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/2571162210461778545'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/calculating-percentiles-in-sas.html' title='Calculating percentiles in SAS'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-6965151504016337553</id><published>2006-12-18T19:11:00.000-08:00</published><updated>2006-12-18T19:24:08.525-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS unix ODS pdf html output'/><title type='text'>Directing SAS output to a pdf file</title><content type='html'>ods pdf file= "/usr2/users/student/mkaushik/bio213/testd.pdf";&lt;br /&gt;*** would direct all the output to testd.pdf file*&lt;br /&gt;&lt;br /&gt;*ods pdf file ="%sysfunc&lt;br /&gt;(reverse(%sysfunc(substr(%sysfunc(reverse(%sysfunc(reverse(%scan(%sysfunc(reverse(%sysfunc(getoption(sysin)))),1,/))))),5)))).pdf";&lt;br /&gt;goptions reset=global device=gif ftitle=swissb ftext=swissb htitle=2 htext=2;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;data weights;&lt;br /&gt;infile '/usr2/users/student/mkaushik/ne/lbw1';&lt;br /&gt;****change the above line to reflect where you have saved lbw.dat**;&lt;br /&gt;&lt;br /&gt;input id low age lwt race smoke ptl ht ui ftv bwt;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc means;&lt;br /&gt;var age lwt bwt;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc univariate plot;&lt;br /&gt;var age lwt bwt;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;proc gplot;&lt;br /&gt;plot bwt*lwt;&lt;br /&gt;proc corr pearson spearman;&lt;br /&gt;var bwt lwt;&lt;br /&gt;&lt;br /&gt;proc gplot data =results;&lt;br /&gt;plot bwt*lwt= '.' pred1*lwt='*' lowerm*lwt='L' upperm*lwt='U'/ overlay;&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;quit;&lt;br /&gt;ods pdf close;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-6965151504016337553?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/6965151504016337553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=6965151504016337553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6965151504016337553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6965151504016337553'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/directing-sas-output-to-pdf-file.html' title='Directing SAS output to a pdf file'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3975658398050108034</id><published>2006-12-18T18:45:00.000-08:00</published><updated>2008-03-23T14:31:52.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS unix ODS pdf html output'/><title type='text'>Making nice plots &amp; name ods html files after SAS files</title><content type='html'>Output Delivery System (ODS) is a preferred way of making nice tables and graphs.&lt;br /&gt;I recommend using following statement which automatically directs the ODS output to a file with the same name and in the same directory as the program. The following code makes a html file. HTML files can be viewed in UNIX (using lynx) as well as Windows , open quickly and cut pasted easily in Document and Spreadsheet programs.&lt;br /&gt;&lt;br /&gt;(remove spaces from following to make this work)&lt;br /&gt;ods html file ="%sysfunc&lt;br /&gt;(reverse(%sysfunc(substr(%sysfunc(reverse(%sysfunc(reverse&lt;br /&gt;(%scan(%sysfunc(reverse(%sysfunc(getoption(sysin)))),1,/))))),5)))).html"&lt;br /&gt;STYLE=MINIMAL;&lt;br /&gt;&lt;br /&gt;gpath="/usr2/users/student/mkaushik/web/";&lt;br /&gt;&lt;br /&gt;data=&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;proc anova;&lt;br /&gt;.&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;ods html close;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For an html file with frames, you can enter the following code spanning the proc statements&lt;br /&gt;&lt;br /&gt;ods html body="/usr2/users/student/mkaushik/web/mixed_output.html"&lt;br /&gt;        contents="/usr2/users/student/mkaushik/web/mixed_contents.html"&lt;br /&gt;        frame="/usr2/users/student/mkaushik/web/mixed_frame.html";&lt;br /&gt;&lt;br /&gt;proc&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;run;&lt;br /&gt;&lt;br /&gt;ods html close;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this ODS statement there are three files:&lt;br /&gt;&lt;br /&gt;  1. BODY which specifies the file to contain the output from the PROC.&lt;br /&gt;  2. CONTENTS which specifies the file to contain the table of contents.&lt;br /&gt;  3. FRAME which specifies the file to contain reference to the table of contents and the output from the PROC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3975658398050108034?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3975658398050108034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3975658398050108034' title='56 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3975658398050108034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3975658398050108034'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/making-nice-plots-directing-output-to.html' title='Making nice plots &amp; name ods html files after SAS files'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>56</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-3757439744912808503</id><published>2006-12-18T18:40:00.000-08:00</published><updated>2006-12-18T19:25:09.574-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS UNIX compressed data manipulation gzip zip'/><title type='text'>Reading compressed data</title><content type='html'>&lt;p&gt;Sometimes large datasets are available as ASCII files. However, they are too large to be put on HSPH &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;unix&lt;/span&gt;&lt;/span&gt; system because of limited disk space. These files can be compressed and put on &lt;span class="GramE"&gt;Unix&lt;/span&gt; system and uncompressed ‘on the go’. While 7Z and &lt;span class="SpellE"&gt;gzip&lt;/span&gt; compressed files can be read as well, the simple compressed files are most easily read. There are two ways to compress a file, &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="GramE"&gt;compress&lt;/span&gt; filename &amp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Replace "filename" with the name of the data file you wish to compress. This creates a new file with the extension ".Z". For example, if you compress a file called "&lt;span class="SpellE"&gt;unit.dat&lt;/span&gt;," a compressed file called "&lt;span class="SpellE"&gt;unit.dat.Z&lt;/span&gt;" would be created, replacing the original file (&lt;span class="SpellE"&gt;unit.dat&lt;/span&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;gzip&lt;/span&gt;&lt;/span&gt; filename &amp;amp;&lt;/p&gt;  &lt;p&gt;This creates a new file with the extension ".&lt;span class="SpellE"&gt;gz&lt;/span&gt;". For example, if you compress a file called "&lt;span class="SpellE"&gt;unit.dat&lt;/span&gt;," a compressed file called "&lt;span class="SpellE"&gt;unit.dat.gz&lt;/span&gt;" would be created, replacing the original file (&lt;span class="SpellE"&gt;unit.dat&lt;/span&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;To read the .Z compressed file into SAS without having to uncompress it beforehand, you should add the following to your program:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;          &lt;p class="MsoNormal"&gt;FILENAME &lt;span class="SpellE"&gt;pipedata&lt;/span&gt; PIPE '&lt;span class="SpellE"&gt;zcat&lt;/span&gt; /usr2/users/student/mkaushik/ne/&lt;span class="GramE"&gt;unit.z' ;&lt;/span&gt; /* &lt;span class="SpellE"&gt;pipedata&lt;/span&gt; is user &lt;span class="SpellE"&gt;choosen&lt;/span&gt; word */&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;DATA weights;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;/span&gt;INFILE &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;pipedata&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style=""&gt;  &lt;/span&gt;;&lt;/span&gt; /* This &lt;span class="SpellE"&gt;pipedata&lt;/span&gt; is user &lt;span class="SpellE"&gt;choosen&lt;/span&gt; word */&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;input&lt;/span&gt; &lt;span class="SpellE"&gt;cogscore&lt;/span&gt; race &lt;span class="SpellE"&gt;hosmokin&lt;/span&gt; &lt;span class="SpellE"&gt;htn&lt;/span&gt; &lt;span class="SpellE"&gt;hochf&lt;/span&gt; age female &lt;span class="SpellE"&gt;charlson&lt;/span&gt; &lt;span class="SpellE"&gt;hrtdis&lt;/span&gt; pf36 mh36 pn36 enr36 sf36 &lt;span class="SpellE"&gt;nyha&lt;/span&gt;; &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;run&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;/* &lt;span class="SpellE"&gt;Zcat&lt;/span&gt; decompresses the data of the input file, and writes the result on the standard output. This data is piped into SAS for being read in. */&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="SpellE"&gt;Gzipped&lt;/span&gt; files can also be read in using following commands.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;              &lt;p class="MsoNormal"&gt;FILENAME &lt;u&gt;pipedata1&lt;/u&gt; PIPE '&lt;span class="SpellE"&gt;gzcat&lt;/span&gt; /usr2/users/student/mkaushik/ne/&lt;span class="GramE"&gt;page.gz' ;&lt;/span&gt; /* pipedata1 is user &lt;span class="SpellE"&gt;choosen&lt;/span&gt; word */&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;span style=""&gt; &lt;/span&gt;DATA weights;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;br /&gt;INFILE pipedata1;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;input&lt;/span&gt; &lt;span class="SpellE"&gt;cogscore&lt;/span&gt; race &lt;span class="SpellE"&gt;hosmokin&lt;/span&gt; &lt;span class="SpellE"&gt;htn&lt;/span&gt; &lt;span class="SpellE"&gt;hochf&lt;/span&gt; age female &lt;span class="SpellE"&gt;charlson&lt;/span&gt; &lt;span class="SpellE"&gt;hrtdis&lt;/span&gt; pf36 mh36 pn36 enr36 sf36 &lt;span class="SpellE"&gt;nyha&lt;/span&gt;; &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;run&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;/* &lt;span class="GramE"&gt;This&lt;/span&gt; would only work on HSPH system and not on &lt;span class="SpellE"&gt;Channing&lt;/span&gt; system */&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;pre&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/pre&gt;          &lt;p class="MsoNormal"&gt;FILENAME &lt;u&gt;pipedata1&lt;/u&gt; PIPE '&lt;span class="SpellE"&gt;gzip&lt;/span&gt; –dc /usr2/users/student/mkaushik/ne/&lt;span class="GramE"&gt;page.gz' ;&lt;/span&gt; /* pipedata1 is user &lt;span class="SpellE"&gt;choosen&lt;/span&gt; word */&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;/span&gt;DATA weights;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;/span&gt;INFILE pipedata1;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;input&lt;/span&gt; &lt;span class="SpellE"&gt;cogscore&lt;/span&gt; race &lt;span class="SpellE"&gt;hosmokin&lt;/span&gt; &lt;span class="SpellE"&gt;htn&lt;/span&gt; &lt;span class="SpellE"&gt;hochf&lt;/span&gt; age female &lt;span class="SpellE"&gt;charlson&lt;/span&gt; &lt;span class="SpellE"&gt;hrtdis&lt;/span&gt; pf36 mh36 pn36 enr36 sf36 &lt;span class="SpellE"&gt;nyha&lt;/span&gt;; &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;run&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;/* &lt;span class="GramE"&gt;This&lt;/span&gt; would work on both HSPH and &lt;span class="SpellE"&gt;Channing&lt;/span&gt; system */ &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-3757439744912808503?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/3757439744912808503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=3757439744912808503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3757439744912808503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/3757439744912808503'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/reading-compressed-data.html' title='Reading compressed data'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-1344170741292175093</id><published>2006-12-18T18:37:00.000-08:00</published><updated>2006-12-18T19:26:47.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS unix tab delimited file data input'/><title type='text'>Reading Tab delimited files into SAS</title><content type='html'>&lt;o:p&gt;Tab delimited files are in following format      (note that the tabs separate different data points). Missing data in this&lt;/o:p&gt;&lt;o:p&gt; format can cause error.&lt;/o:p&gt;  &lt;br /&gt;&lt;p class="MsoNormal"&gt;12    10    34&lt;/p&gt;&lt;p class="MsoNormal"&gt;6    6    9&lt;/p&gt;&lt;p class="MsoNormal"&gt;78    89    2&lt;/p&gt;&lt;p class="MsoNormal"&gt;45    84    84&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;To read tab delimited files, use one of the following statements&lt;/p&gt;            &lt;p class="MsoNormal"&gt;&lt;o:p&gt;INFILE "'/usr2/users/student/mkaushik/shh/cars6.dat"      DELIMITER='09'x; /* change the location of the file */&lt;br /&gt;    &lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;INPUT rake note pgg ; /* these are variable names of      your choice*/&lt;br /&gt;run;&lt;br /&gt;    &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-1344170741292175093?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/1344170741292175093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=1344170741292175093' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1344170741292175093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/1344170741292175093'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/reading-tab-delimited-files-into-sas.html' title='Reading Tab delimited files into SAS'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5055696089992083602.post-6603701008289140801</id><published>2006-12-18T18:34:00.000-08:00</published><updated>2006-12-18T19:27:11.818-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS unix csv excel delimited file data input'/><title type='text'>Reading CSV file</title><content type='html'>&lt;div class="Section1"&gt;                   &lt;p class="MsoNormal"&gt;&lt;o:p&gt;Each individual Excell work sheet can be converted into      CSV or tab delimited files for being read in SAS. CSV files are in following format (note that      commas separate different data points). This format is especially suitable if you have missing data.&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt;12,10,34&lt;br /&gt;    6,9,0&lt;br /&gt;    78,89,46&lt;br /&gt;    2,3,2&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt;To read csv files, use one of the following statements&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;         &lt;p class="MsoNormal"&gt;&lt;span class="GramE"&gt;infile&lt;/span&gt; '/usr2/users/student/mkaushik/shh/data1.csv'      dsd;&lt;o:p&gt;/* change the location of the file */&lt;br /&gt;    &lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;INPUT rake note pgg ; /* these are variable names of      your choice*/ &lt;/o:p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;run;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;or&lt;/span&gt; &lt;/p&gt;               &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;span class="GramE"&gt;infile&lt;/span&gt; '/usr2/users/student/mkaushik/shh/data1.csv'      delimiter=','; &lt;o:p&gt;/* change the location of the file */&lt;br /&gt;    &lt;/o:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;INPUT rake note pgg ; /* these are variable names of      your choice*/&lt;br /&gt;run;&lt;/o:p&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5055696089992083602-6603701008289140801?l=sasonunix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sasonunix.blogspot.com/feeds/6603701008289140801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5055696089992083602&amp;postID=6603701008289140801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6603701008289140801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5055696089992083602/posts/default/6603701008289140801'/><link rel='alternate' type='text/html' href='http://sasonunix.blogspot.com/2006/12/reading-csv-file.html' title='Reading CSV file'/><author><name>Why</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
