Statistical programming, matrix languages, and more

Proc IML outtput file

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 13
Accepted Solution

Proc IML outtput file

I am trying to modify a set of code so it can produce varnames with 32 characters, currently its only giving me 20 characters...any help would be greatly appreciated...

 

proc iml; reset noprint; use params;
read all var{variable} into varnames;
read all var _all_ into b;
use Cov1; read all var _num_ into x1;
use Cov2; read all var _num_ into x2;
use CovI; read all var _num_ into x3;

cov = x1 + x2 - x3; /* Calculate covariance matrix */
dfe = b[1,3]; stdb = sqrt(vecdiag(cov)); beta = b[,1]; z = beta/stdb; prob = 1-probf(z#z,1,dfe); /* Calc stats */

print,"Parameter estimates",,varnames[format=$32.] beta[format=8.4] stdb[format=8.4] z[format=8.4] prob[format=8.4];

conc = beta || stdb || z || prob;
cname = {"estimates" "stderror" "zstat" "pvalue"};
create &outdataset from conc [ colname=cname ];
append from conc;

conc = varnames;
cname = {"varnames"};
create names from conc [ colname=cname ];
append from conc;

data &outdataset; merge names &outdataset; run;

quit;


Accepted Solutions
Solution
‎01-25-2017 05:03 PM
SAS Super FREQ
Posts: 3,634

Re: Proc IML outtput file

Run

proc contents data=params; run;

to view the length of the 'variable' variable. In your IML program, the statement

read all var{variable} into varnames;

means that nleng(varnames) be equal to the length of the 'variable' variable in the PARAMS data set.

If that is the problem, you can use the LENGTH statement in a DATA set to make the variable wider.

 

If you don't have control over the input, you can always resize the CONC variable by using the PUTC function to apply the $32 format, like this:

 

conc = putc(varnames, "$32.");

 

 

View solution in original post


All Replies
Solution
‎01-25-2017 05:03 PM
SAS Super FREQ
Posts: 3,634

Re: Proc IML outtput file

Run

proc contents data=params; run;

to view the length of the 'variable' variable. In your IML program, the statement

read all var{variable} into varnames;

means that nleng(varnames) be equal to the length of the 'variable' variable in the PARAMS data set.

If that is the problem, you can use the LENGTH statement in a DATA set to make the variable wider.

 

If you don't have control over the input, you can always resize the CONC variable by using the PUTC function to apply the $32 format, like this:

 

conc = putc(varnames, "$32.");

 

 

Occasional Contributor
Posts: 13

Re: Proc IML outtput file

Thanks so much Rick!

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 257 views
  • 1 like
  • 2 in conversation