LesezeichenAbonnierenRSS-Feed abonnieren
sauer
Obsidian | Level 7

Guten Abend!

 

Folgende Beispieldaten habe ich:

 

data start;
input runde location;
datalines;
1 101
1 203
1 303
1 401
1 502
2 106
2 201
2 300
2 409
2 505
3 1
3 17
3 32
3 45
;
run;

 

Jeder Beobachtung soll

differenz = location(n+1) - location(n) 

angehängt werden. Allerdings soll bei last.runde dann ein missing stehen.

 

Wie kann ich das elegant erreichen?

Mit retain habe ich mich noch nicht so angefreundet 😞

 

Vielen Dank.

 

Frank 

4 ANTWORTEN 4
FreelanceReinh
Jade | Level 19

Hallo, Frank,

 

das lässt sich ganz ohne RETAIN mit einem "Look-ahead-Merge" erreichen:

data ziel;
merge start
      start(firstobs=2 rename=(runde=nextrunde location=nextlocation));
if runde=nextrunde then differenz=nextlocation-location;
drop next:;
run;

 

Falls die SAS-Systemoption MERGENOBY auf WARN gesetzt ist, würde ich sie für diesen Step vorübergehend auf NOWARN umsetzen, damit keine unnötige Warning im Log erscheint:

options mergenoby=nowarn;

Beste Grüße

 

Reinhard

sauer
Obsidian | Level 7

Das hatte ich mir auch schon angesehen ....  aber nicht recht verstanden 😞

Funktioniert super - vielen Dank!

Ich werde es morgen auf die "heissen" Daten loslassen - mal sehen was passiert 😉

 

Danke und Grüße

Frank

 

FreelanceReinh
Jade | Level 19

Der Trick besteht darin, dass durch das firstobs=2 die Sätze der zweiten Kopie von start um einen nach oben versetzt neben die Sätze der ersten Kopie gestellt werden. Dadurch hat man eine Kopie des zweiten Satzes neben dem ersten, eine Kopie des dritten neben dem zweiten usw. ("look ahead"). Dank der RENAME=-Option lassen sich die Variablen der beiden Kopien des Datasets unterscheiden und wie verschiedene Variablen verwenden. Die IF-Bedingung verhindert, dass die Differenzen über Gruppengrenzen hinweg gebildet werden.

sauer
Obsidian | Level 7

Vielen Dank - funktioniert.

So elegant .... ich sollte eher mal nachfragen 😉

 

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 4 Antworten
  • 953 Aufrufe
  • 0 Kudos
  • 2 in Unterhaltung