2016-06-03 7 views
0

Ich habe:SAS: multiplyi Beobachtungen und iterieren eine Spalte

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

ich jede Beobachtung haben wollen um den Faktor 1,1 und 0,9 verschoben dupliziert und Kilometerstand werden, was zu:

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

I kann das mit 3x datenschritten und 2x proc anhängen, aber es fühlt sich blöd an.

Irgendein einfacherer Weg?

Antwort

2

Verwenden Sie einfach eine DO-Schleife.

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

Dies funktioniert wie ein Charme. Meinen Dank. – pinegulf

-1

Hier ist eine einstufige Lösung,

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; 
+0

Kann der Typ erklären, warum Sie meine Lösung abstimmen? – Jianfeng

+0

Ihre Antwort ist genau die gleiche wie die, die Tom gepostet hat. Auch 'foo' ist ein Beispiel-Dataset - die Kombination Ihrer Antwort macht es nicht besser. – superfluous