0
votes

I got:

data foo;
  length Some_id mileage;
  input Some_id mileage;
  datalines;
1 100
2 200
...
1000 20000
;

I want to have each observation to be duplicated and mileage shifted by factor of 1.1 and 0.9 resulting to:

data bar
1 90
1 100
1 110
2 180
2 200
2 220
.... 

I can do this with 3x data steps and 2x proc append, but it feels stupid.

Any simpler way?

2

2 Answers

2
votes

Just use a DO loop.

data bar ;
  set foo ;
  do factor = 0.9, 1, 1.1 ;
    new_mileage = factor * mileage;
    output;
  end;
run;
-1
votes

Here is a one step solution,

data foo;
  length Some_id mileage 8;
  input Some_id mileage;
  do factor = 0.9, 1.0, 1.1;
    mileage1 = mileage * factor;
    output;
  end;
  drop factor mileage;
  rename mileage1 = mileage;
  datalines;
  1 100
  2 200
  ;
run;