Help using Base SAS procedures

scaling variable in a dataset?

Accepted Solution Solved
Reply
Contributor
Posts: 44
Accepted Solution

scaling variable in a dataset?

I'd like to know how to scale a variable between 0&1 in sas. Perhaps it's possible to do with proc stdize somehow?


Accepted Solutions
Solution
‎12-14-2011 01:22 PM
SAS Super FREQ
Posts: 3,477

scaling variable in a dataset?

If you want a linear transformation that maps your data to [0,1], use

proc stdize data=MyData out=StdOut method=RANGE;

   var vrp;

run;

This maps min(vrp) to 0 and max(vrp) to 1. The transformation is

x --> (x - min(x))/range(x)

http://support.sas.com/documentation/cdl/en/statug/63962/HTML/default/viewer.htm#statug_stdize_sect0...

View solution in original post


All Replies
Super User
Posts: 10,500

scaling variable in a dataset?

It will be helpful to provide a bit more detail on what you hope to accomplish.

Contributor
Posts: 44

scaling variable in a dataset?

I simply would like to make the variable vrp scaled between 0&1, the dataset is attached above if it helps..

Super User
Posts: 17,829

scaling variable in a dataset?

What are the rules for scaling between 0 and 1. How will both 116 and -118 map to the scale from 0 to 1?

You could just use the percentile, but depending on what you're doing that could make absolutely no sense.

Contributor
Posts: 44

scaling variable in a dataset?

I need the variable vrp for my time-varying regression:

proc reg data=spainbj outest=brittenjonesspain;

model Identity= MKT MKT*lag(vrp) SMB SMB*lag(vrp) HML HML*lag(vrp) MOM MOM*lag(vrp)/noint;

run;

this is a britten-jones regression, where betas are portfolio weights. I use the variable vrp to make the portfolio weights time-varying according to lagged value of vrp. Now I need to scale the variable vrp, in order to get the portfolio weights/betas to change in a rational way. Hope this helps..

Super User
Posts: 9,681

scaling variable in a dataset?

you want to standardize this variable to avoid the influence of  scale?

proc stdize will help you. Sure there is also a function looks like stdize() to do it.

Ksharp

Contributor
Posts: 44

scaling variable in a dataset?

Yes! I tried the proc stdize but couldn't get it working. Would someone be able to give me an example on how to proceed with the code here? Thanks in advance.

Solution
‎12-14-2011 01:22 PM
SAS Super FREQ
Posts: 3,477

scaling variable in a dataset?

If you want a linear transformation that maps your data to [0,1], use

proc stdize data=MyData out=StdOut method=RANGE;

   var vrp;

run;

This maps min(vrp) to 0 and max(vrp) to 1. The transformation is

x --> (x - min(x))/range(x)

http://support.sas.com/documentation/cdl/en/statug/63962/HTML/default/viewer.htm#statug_stdize_sect0...

Contributor
Posts: 44

scaling variable in a dataset?

wow, that was easy! Thanks rick!

Contributor
Posts: 44

scaling variable in a dataset?

If I'd like to make the linear transformation between -1 and 1, how could that be done? Checked the methods from Rick's link, but none of them seem to fit this idea straight...

SAS Super FREQ
Posts: 3,477

scaling variable in a dataset?

Run PROC STDIZE with METHOD=RANGE. That creates a variable on [0,1].

Then run a data step that sends x --> 2*x-1. The new range is [-1,1]. For example:

data StdOut;

set StdOut;

vrp = 2*vrp - 1;

run;

Contributor
Posts: 44

scaling variable in a dataset?

easy again, thanks a million rick!

☑ This topic is SOLVED.

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

Discussion stats
  • 11 replies
  • 3250 views
  • 7 likes
  • 5 in conversation