## Proc IML outtput file

Solved
Occasional Contributor
Posts: 13

# 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 _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: 4,176

## 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.");``

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

## 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.