<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: reading in numbeta lines of code does not work? df5 is empty. problem with macro  &amp;quot;save dat in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920283#M362452</link>
    <description>&lt;P&gt;Thank you for your comments. They helped.&lt;/P&gt;</description>
    <pubDate>Thu, 14 Mar 2024 13:30:14 GMT</pubDate>
    <dc:creator>marymarion</dc:creator>
    <dc:date>2024-03-14T13:30:14Z</dc:date>
    <item>
      <title>reading in numbeta lines of code does not work? df5 is empty. problem with macro  "save dataset."</title>
      <link>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920270#M362446</link>
      <description>&lt;PRE&gt;&lt;CODE class=""&gt;%macro halfnorm(dsn,varname,n,cancel=);

/* Creates a half-normal plot
  ASSUMPTIONS
=============
Data is N(0,sigma**2)

INPUTS are the effects from a Yates analysis or an ANOVA
========================================================
dsn     = Datafile, this is called by yatesGunstAnova and must stay dsn
varname = variable to be plotted
n       = number of data points to be plotted
cancel  = controls the creation of a fitted regression line through (0,0)
          cancel=no draw
LVREF   = line-type for vertical ref line, 2=dashed line
*/

data halfnormal; set &amp;amp;dsn; 
abs_&amp;amp;varname=abs(&amp;amp;varname);
n=&amp;amp;n;

proc rank data=halfnormal out=ranks;
var abs_&amp;amp;varname;
ranks R;
run; quit; title;

data plotdata; set ranks;
 abs_&amp;amp;varname=abs(&amp;amp;varname);
 RSTAR = (R-.5)/n; 
 p= RSTAR/2 + .5; 
 v = probit(p);   
 run;
 proc print data=plotdata; run;

PROC GPLOT DATA=plotdata; 
plot v*p;
axis1 color=black label=(height=1.5 ) ;
axis2 color=black minor=none;
run cancel; quit; title;

%mysort(plotdata,abs_&amp;amp;varname);
proc gplot data=plotdata;
PLOT v*abs_&amp;amp;varname /VREF=1 LVREF=2 REGEQN haxis=axis1 vaxis=axis2;
SYMBOL V=DOT I=RL0 COLOR=grey height=1.3 pointlabel=(height=10pt '#source' nodropcollisions) ;
TITLE "HALF-NORMAL PLOT";
TITLE2 'FITTED LINE THROUGH THE ORIGIN';
run; quit; title;
 
options nocenter;
goptions reset=all;
ods graphics on;
%mend halfnorm;

%macro yatesGunstAnova(dsn,model,class,numBeta,numBeta2);

title 'GLM WITH CONTINUOUS PREDICTORS';
%glmTemplate;
proc glm data=&amp;amp;dsn;
model &amp;amp;model/ ss3 solution;
ods output OverallAnova=OverallAnova;
ods output ModelAnova=ModelAnova; 
ods output ParameterEstimates=ParameterEstimates;
run; quit;
/* %myprint(ModelAnova); */ 

data BetaEstimates; set ParameterEstimates; 
keep parameter source estimate RawEffect;
source=compress(parameter,'+'); 
source=compress(source,'*');
source=compress(source,'0');
source=compress(source,'-1');
RawEffect=2*estimate;
run; quit;
/* %myprint(BetaEstimates); */

/* Standardized DEJ Effects */
data ModelAnova2; set ModelAnova;
source=source;
source=compress(source,'*');
ms=ms;   
StdzEffect=sqrt(ms);
HypothesisType=HypothesisType;
keep source ms StdzEffect HypothesisType;
run; quit;

data df1; set &amp;amp;dsn; key=_n_; keep key conv; run;
data df2; set ModelAnova2; key=_n_+1; run;
data df3; set BetaEstimates; key=_n_; run;
data df; merge df1 df3 df2; by key; run;

/*
proc print data=df1; title 'df1'; run; quit;
proc print data=df2; title 'df2'; run; quit;
proc print data=df3; title 'df3'; run; quit;
proc print data=df;  title 'df';  run; quit;
*/

proc sort data=df out=df4; by HypothesisType; run; quit;
data df4; set df4;
   if HypothesisType=1 then delete; 
   if MS = . then delete; 
   drop parameter HypothesisType; 
   rename estimate=BetaEstimate;
   run; quit;
data df4;
  retain conv key source BetaEstimate RawEffect Hypothesis Test MS StdzEffect;
  set df4;
run;

proc sort data=df4 out=df4; key StdzEffect / descending; run; quit;
TITLE "df4"; proc print data=df4; run cancel; quit; 
proc sort data=df4 out=df5; key StdzEffect / ascending; run; quit;
title 'df5'; proc print data=df5; run cancel; quit;

%halfnorm(df4,RawEffect,&amp;amp;numBeta);
%halfnorm(df4,StdzEffect,&amp;amp;numBeta);
%halfnorm(df5,StdzEffect,&amp;amp;numBeta2);

%macro save_dataset(df5);
    proc datasets library=work nolist; save df5; 
    quit;
%mend;
%save_dataset(df5);

%mend yatesGunstAnova;

%macro yatesGunstAnova2;
data dsn2; set work.df5;
proc print data=dsn2; run; quit;
%mend;
%yatesGunstAnova2;

proc datasets library=work kill nolist; quit;
data NuclearPilotPlant;
input A B C D conv tc $ random;
A=A;
B=B;
AB=A*B;
C=C;
AC=A*C;
BC=B*C;
ABC=A*B*C;
D=D;
AD=A*D;
BD=B*D;
ABD=A*B*D;
CD=C*D;
ACD=A*C*D;
BCD=B*C*D;
ABCD=A*B*C*D;
StdOrder=_n_;
Total=1;
cards;
-1  -1  -1  -1 70 (1)   8
 1  -1  -1  -1 60  a    2
-1   1  -1  -1 89  b   10
 1   1  -1  -1 81  ab   4
-1  -1   1  -1 69  c   15
 1  -1   1  -1 62  ac   9
-1   1   1  -1 88  bc   1
 1   1   1  -1 81  abc 13
-1  -1  -1   1 60  d   16
 1  -1  -1   1 49  ad   5
-1   1  -1   1 88  bd  11
 1   1  -1   1 82  abd 14
-1  -1   1   1 60  cd   3
 1  -1   1   1 52  acd 12
-1   1   1   1 86  bcd  6
 1   1   1   1 79 abcd  7      
;

%yatesGunstAnova(dsn=NuclearPilotPlant,model=%str(conv=A B A*B C A*C B*C A*B*C D A*D B*D A*B*D C*D A*C*D B*C*D A*B*C*D),
                 class=A B C D,numBeta=15,numBeta2=10);
 
data dsn2; set work.dsn2(obs=10); run; 
proc print; run;


&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Mar 2024 11:15:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920270#M362446</guid>
      <dc:creator>marymarion</dc:creator>
      <dc:date>2024-03-14T11:15:38Z</dc:date>
    </item>
    <item>
      <title>Re: reading in numbeta lines of code does not work? df5 is empty. problem with macro  "save dat</title>
      <link>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920275#M362450</link>
      <description>&lt;P&gt;When I ran the code you posted,&amp;nbsp;work.df5 was not empty:&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure SQL: Query Results" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r b header" scope="col"&gt;conv&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;key&lt;/TH&gt;
&lt;TH class="l b header" scope="col"&gt;source&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;BetaEstimate&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;RawEffect&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;Mean Square&lt;/TH&gt;
&lt;TH class="r b header" scope="col"&gt;StdzEffect&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;49&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="l data"&gt;AD&lt;/TD&gt;
&lt;TD class="r data"&gt;0.00000000&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="r data"&gt;0.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;69&lt;/TD&gt;
&lt;TD class="r data"&gt;5&lt;/TD&gt;
&lt;TD class="l data"&gt;C&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.12500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.25&lt;/TD&gt;
&lt;TD class="r data"&gt;0.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;60&lt;/TD&gt;
&lt;TD class="r data"&gt;13&lt;/TD&gt;
&lt;TD class="l data"&gt;CD&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.12500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.25&lt;/TD&gt;
&lt;TD class="r data"&gt;0.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;52&lt;/TD&gt;
&lt;TD class="r data"&gt;14&lt;/TD&gt;
&lt;TD class="l data"&gt;ACD&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.12500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.25&lt;/TD&gt;
&lt;TD class="r data"&gt;0.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;79&lt;/TD&gt;
&lt;TD class="r data"&gt;16&lt;/TD&gt;
&lt;TD class="l data"&gt;ABCD&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.12500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.25&lt;/TD&gt;
&lt;TD class="r data"&gt;0.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;82&lt;/TD&gt;
&lt;TD class="r data"&gt;12&lt;/TD&gt;
&lt;TD class="l data"&gt;ABD&lt;/TD&gt;
&lt;TD class="r data"&gt;0.25000000&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;1.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;62&lt;/TD&gt;
&lt;TD class="r data"&gt;6&lt;/TD&gt;
&lt;TD class="l data"&gt;AC&lt;/TD&gt;
&lt;TD class="r data"&gt;0.37500000&lt;/TD&gt;
&lt;TD class="r data"&gt;0.75&lt;/TD&gt;
&lt;TD class="r data"&gt;2.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;1.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;81&lt;/TD&gt;
&lt;TD class="r data"&gt;8&lt;/TD&gt;
&lt;TD class="l data"&gt;ABC&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.37500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.75&lt;/TD&gt;
&lt;TD class="r data"&gt;2.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;1.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;86&lt;/TD&gt;
&lt;TD class="r data"&gt;15&lt;/TD&gt;
&lt;TD class="l data"&gt;BCD&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.37500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.75&lt;/TD&gt;
&lt;TD class="r data"&gt;2.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;1.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;81&lt;/TD&gt;
&lt;TD class="r data"&gt;4&lt;/TD&gt;
&lt;TD class="l data"&gt;AB&lt;/TD&gt;
&lt;TD class="r data"&gt;0.50000000&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;4.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;88&lt;/TD&gt;
&lt;TD class="r data"&gt;7&lt;/TD&gt;
&lt;TD class="l data"&gt;BC&lt;/TD&gt;
&lt;TD class="r data"&gt;-0.62500000&lt;/TD&gt;
&lt;TD class="r data"&gt;-1.25&lt;/TD&gt;
&lt;TD class="r data"&gt;6.250000&lt;/TD&gt;
&lt;TD class="r data"&gt;2.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;88&lt;/TD&gt;
&lt;TD class="r data"&gt;11&lt;/TD&gt;
&lt;TD class="l data"&gt;BD&lt;/TD&gt;
&lt;TD class="r data"&gt;2.25000000&lt;/TD&gt;
&lt;TD class="r data"&gt;4.5&lt;/TD&gt;
&lt;TD class="r data"&gt;81.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;60&lt;/TD&gt;
&lt;TD class="r data"&gt;9&lt;/TD&gt;
&lt;TD class="l data"&gt;D&lt;/TD&gt;
&lt;TD class="r data"&gt;-2.75000000&lt;/TD&gt;
&lt;TD class="r data"&gt;-5.5&lt;/TD&gt;
&lt;TD class="r data"&gt;121.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;11&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;60&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="l data"&gt;A&lt;/TD&gt;
&lt;TD class="r data"&gt;-4.00000000&lt;/TD&gt;
&lt;TD class="r data"&gt;-8&lt;/TD&gt;
&lt;TD class="r data"&gt;256.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;16&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;89&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="l data"&gt;B&lt;/TD&gt;
&lt;TD class="r data"&gt;12.00000000&lt;/TD&gt;
&lt;TD class="r data"&gt;24&lt;/TD&gt;
&lt;TD class="r data"&gt;2304.000000&lt;/TD&gt;
&lt;TD class="r data"&gt;48&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;but there were several problems with the code.&lt;/P&gt;
&lt;P&gt;Within the&amp;nbsp;&lt;STRONG&gt;halfnorm&lt;/STRONG&gt; macro definition:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The PROC GPLOT step&amp;nbsp; (lined 35-39) closes with a RUN CANCEL, so the step never executes. Why include this code if you don't intend it to run?&lt;/LI&gt;
&lt;LI&gt;Macro&amp;nbsp;&lt;STRONG&gt;mysort&lt;/STRONG&gt;&amp;nbsp;gets called on line 41, but it was never defined. So, of course, it cannot execute...&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;On lines 119 to 123:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro save_dataset(df5);
    proc datasets library=work nolist; save df5; 
    quit;
%mend;
%save_dataset(df5);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The definition for macro&amp;nbsp;&lt;STRONG&gt;savedataset&lt;/STRONG&gt; will &lt;EM&gt;always&lt;/EM&gt; delete everything from the&amp;nbsp;WORK library except DF5. It's hard-coded - the parameter on the macro definition is totally useless.&lt;/P&gt;
&lt;P&gt;Finally, at the end:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data dsn2; 
	set work.dsn2(obs=10); 
run; 
proc print; run;&lt;/CODE&gt;&lt;/PRE&gt;
Because you deleted everything from the WORK library except DF5, there is no &lt;STRONG&gt;work.dsn2&lt;/STRONG&gt;&amp;nbsp;dataset for you to read here. And honestly, if you just wanted to print 10 observations, you shouldn't overwrite the original dataset - just use:
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV align="left"&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc print data=work.dsn2(obs=10);
run;
&lt;/CODE&gt;&lt;/PRE&gt;
I think that there are several macros defined here that would have been better written as plain SAS code.&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 14 Mar 2024 12:16:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920275#M362450</guid>
      <dc:creator>SASJedi</dc:creator>
      <dc:date>2024-03-14T12:16:09Z</dc:date>
    </item>
    <item>
      <title>Re: reading in numbeta lines of code does not work? df5 is empty. problem with macro  "save dat</title>
      <link>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920283#M362452</link>
      <description>&lt;P&gt;Thank you for your comments. They helped.&lt;/P&gt;</description>
      <pubDate>Thu, 14 Mar 2024 13:30:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/reading-in-numbeta-lines-of-code-does-not-work-df5-is-empty/m-p/920283#M362452</guid>
      <dc:creator>marymarion</dc:creator>
      <dc:date>2024-03-14T13:30:14Z</dc:date>
    </item>
  </channel>
</rss>

