nochaml das alte problem mit der neuen spalte

Hallo nochmal :-)

Bisher hat das ganze super funktioniert mit dem erzeugen der neuen spalte (siehe http://www.redscope.org/node/524
musste nen neuen thread aufmachen, da ich sonst die datei nicht anhängen hätte können.

jetzt tritt das problem auf dass ich das ganze noch eine stufe weiter treiben muss und es aus irgendeinem grund nicht hinbekomme.
Sieht csv datei im anhang.

Die spalte EForm_cycle erzuege ich so ...

proc sort data=lib_out.&studynam._&tabnam._BDE;
by Visit_Code SubjectID ;
run;
data lib_out.&studynam._&tabnam._BDE ;
    
set lib_out.&studynam._&tabnam._BDE;
    
by Visit_code SubjectID ;

    
retain temp_1;
    
if first.SubjectID then do;
         n=
1;
    
end;

    
if Question_Code=&v_rep. then do;
        temp_1=response;
    
end;

    
if Question_Code=&v_rep. and not first.SubjectID and response ne lag(temp_1) then do;
         n+
1;
    
end;

    EForm_cycle=n;
run;

geht wunderbar. das klappt so wie ichs will. jetzt wollte bzw muss ich noch eine weitere zeile einfügen "question_rep"
die soll ähnlich wie die "eform_cycle" erstellen werden, jedoch von einem anderen inhalt der variable response abhängig.

Versucht hab ich das ganze so:

proc sort data=lib_out.&studynam._&tabnam._BDE;
by EForm_cycle Visit_Code SubjectID;
run;


data lib_out.&studynam._&tabnam._BDE ;
    
set lib_out.&studynam._&tabnam._BDE;
    
by EForm_cycle Visit_Code SubjectID;


    
retain temp_2;

    
if first.SubjectID then do;
         m=
0;
    
end;

    
if Question_Code=&q_rep. then do;
        temp_2=response;
    
end;

    
if Question_Code=&q_rep.    and not first.SubjectID
                                and    not first.Visit_Code
                                and not first.EForm_cycle
                                and response ne lag(temp_2)
then do;
        m+
1;
    
end;

    
if _n_=1 then Question_rep = 1;

    Question_rep = m;

run;

also ganz ähnlich wie oben, es scheint auch zu funktionieren zum teil, nur stimmt die nummerierung nicht ganz. ich brüt jetzt schon seit ner weile über der datei und kanns nicht lösen... dann frag ich doch besser nochmal hier nach. vielleicht sehich den wald vor lauter bäumen wieder nicht :)
die spalte qestion_rep soll anhänhig von SubjectID Visit_code und EForm_cycle durchnummeriert werden (wobei Visit_code hier keine rolle spielt um grunde). und dabei immer sobald sich in der response spalte in den zeilen wo time1 als question_code steht , um eins hochgezählt werden. Wenn ich m mit 0 starten lass passts nicht, und mit eins ander auch nicht. im einen fall starten manche mit 0 was ja nicht sein soll und im anderen beginnen einige bei 2... ich bin sehr verwirrt. irgendwo in den daten da muss da ne falle sein die ich mir gestellt hab ;)
und mir ist viel zu heiss hier ;) ich geh mal heim...

gruß
nico

LAG-Funktion

Hallo Nico,

ich nehme an, ohne die Daten zu kennen (ich finde keinen Anhang), dass es an der LAG-Funktion liegt. Diese funktioniert im Prinzip wie ein Stack. Nur wenn diese Funktion aufgerufen wird, dann kommt der aktuelle Wert, bei LAG(temp_2) eben der aktuelle Wert von temp_2, oben auf den Stack, während die alten Werte um eine Position nach hinten verschoben werden. Im ersten Fall funktioniert dies, da die LAG-Funktion "regelmäßig" innerhalb einer Gruppe aufgerufen wird. Denn nur dann steht in LAG(temp_1) auf tatsächlich der Wert aus dem Vorgängersatz. Im zweiten Fall ist das wahrscheinlich nicht mehr der Fall, daher versuche es mal so

retain temp_2 temp_3;
...

temp_3=lag(temp_2)
if Question_Code=&
q_rep.    and not first.SubjectID
                                and    not first.Visit_Code
                                and not first.EForm_cycle
                                and response ne temp_3 then do;
        m+
1;
    
end;

Dadurch erreichst Du, dass die LAG-Funktion "regelmäßig innerhalb einer Gruppe aufgerufen wird.

Ist wie gesagt eine Vermutung , da ich es nicht ausprobieren kann.

Gruß
Wolfgang

thx. ich versuchs gleich mal

thx. ich versuchs gleich mal , sonst such ich nach ner möglichkeit auch das beispielfile hochzuladen :)

csv beispiel...

das war das ergebnis meinses gestigen versuchts. wie zu sehen ist stimmt ab zeilte 135 das ganze nicht, da er mit 0 wieder anfängt...

bisher hat mir der erste tip nicht geholfen, jedenfalls stimmts immernoch nicht wirklih leider.

SubjectID,Visit_code,EForm_cycle,Question_code,Question_rep,Response
1,V00,1,TESTNAME,1,Tests Couplés
1,V00,1,TIME1,1,-30 min
1,V00,1,PARAM,1,hGH
1,V00,1,PAR_RES,1,0.2
1,V00,1,PAR_UNIT,1,2108
1,V00,1,PAR_DEF,1,0.2
1,V00,1,PAR_COM,1,
1,V00,1,TESTNAME,2,Tests Couplés
1,V00,1,TIME1,2,0
1,V00,1,PARAM,2,hGH
1,V00,1,PAR_RES,2,0.2
1,V00,1,PAR_UNIT,2,2108
1,V00,1,PAR_DEF,2,0.2
1,V00,1,PAR_COM,2,
1,V00,1,TESTNAME,3,Tests Couplés
1,V00,1,TIME1,3,15 min
1,V00,1,PARAM,3,hGH
1,V00,1,PAR_RES,3,-1
1,V00,1,PAR_UNIT,3,2108
1,V00,1,PAR_DEF,3,-1
1,V00,1,PAR_COM,3,
1,V00,1,TESTNAME,4,Tests Couplés
1,V00,1,TIME1,4,30 min
1,V00,1,PARAM,4,hGH
1,V00,1,PAR_RES,4,0.2
1,V00,1,PAR_UNIT,4,2108
1,V00,1,PAR_DEF,4,0.2
1,V00,1,PAR_COM,4,
1,V00,1,TESTNAME,5,Tests Couplés
1,V00,1,TIME1,5,45 min
1,V00,1,PARAM,5,hGH
1,V00,1,PAR_RES,5,-1
1,V00,1,PAR_UNIT,5,2108
1,V00,1,PAR_DEF,5,-1
1,V00,1,PAR_COM,5,
1,V00,1,TESTNAME,6,Tests Couplés
1,V00,1,TIME1,6,60 min
1,V00,1,PARAM,6,hGH
1,V00,1,PAR_RES,6,0.2
1,V00,1,PAR_UNIT,6,2108
1,V00,1,PAR_DEF,6,0.2
1,V00,1,PAR_COM,6,
1,V00,1,TESTNAME,7,Tests Couplés
1,V00,1,TIME1,7,90 min
1,V00,1,PARAM,7,hGH
1,V00,1,PAR_RES,7,0.2
1,V00,1,PAR_UNIT,7,2108
1,V00,1,PAR_DEF,7,0.2
1,V00,1,PAR_COM,7,
1,V00,1,TESTNAME,8,Tests Couplés
1,V00,1,TIME1,8,120 min
1,V00,1,PARAM,8,hGH
1,V00,1,PAR_RES,8,0.4
1,V00,1,PAR_UNIT,8,2108
1,V00,1,PAR_DEF,8,0.4
1,V00,1,PAR_COM,8,
1,V00,1,TESTNAME,9,Tests Couplés
1,V00,1,TIME1,9,180 min
1,V00,1,PARAM,9,hGH
1,V00,1,PAR_RES,9,4.8
1,V00,1,PAR_UNIT,9,2108
1,V00,1,PAR_DEF,9,4.8
1,V00,1,PAR_COM,9,
1,V00,2,TESTNAME,1,Tests Simples
1,V00,2,TIME1,1,- 30 min
1,V00,2,PARAM,1,hGH
1,V00,2,PAR_RES,1,0.3
1,V00,2,PAR_UNIT,1,2108
1,V00,2,PAR_DEF,1,0.3
1,V00,2,PAR_COM,1,
2,V00,1,TESTNAME,1,Tests Simples
2,V00,1,TIME1,1,- 30 min
2,V00,1,PARAM,1,hGH
2,V00,1,PAR_RES,1,1.5
2,V00,1,PAR_UNIT,1,2108
2,V00,1,PAR_DEF,1,1.5
2,V00,1,PAR_COM,1,No c
2,V00,1,TESTNAME,2,Tests Simples
2,V00,1,TIME1,2,0
2,V00,1,PARAM,2,hGH
2,V00,1,PAR_RES,2,0.4
2,V00,1,PAR_UNIT,2,2108
2,V00,1,PAR_DEF,2,0.4
2,V00,1,PAR_COM,2,No c
2,V00,1,TESTNAME,3,Tests Simples
2,V00,1,TIME1,3,15 min
2,V00,1,PARAM,3,hGH
2,V00,1,PAR_RES,3,-1
2,V00,1,PAR_UNIT,3,2108
2,V00,1,PAR_DEF,3,-1
2,V00,1,PAR_COM,3,
2,V00,1,TESTNAME,4,Tests Simples
2,V00,1,TIME1,4,30 min
2,V00,1,PARAM,4,hGH
2,V00,1,PAR_RES,4,8.8
2,V00,1,PAR_UNIT,4,2108
2,V00,1,PAR_DEF,4,8.8
2,V00,1,PAR_COM,4,No c
2,V00,1,TESTNAME,5,Tests Simples
2,V00,1,TIME1,5,45 min
2,V00,1,PARAM,5,hGH
2,V00,1,PAR_RES,5,7.9
2,V00,1,PAR_UNIT,5,2108
2,V00,1,PAR_DEF,5,7.9
2,V00,1,PAR_COM,5,
2,V00,1,TESTNAME,6,Tests Simples
2,V00,1,TIME1,6,60 min
2,V00,1,PARAM,6,hGH
2,V00,1,PAR_RES,6,2.7
2,V00,1,PAR_UNIT,6,2108
2,V00,1,PAR_DEF,6,2.7
2,V00,1,PAR_COM,6,
2,V00,1,TESTNAME,7,Tests Simples
2,V00,1,TIME1,7,90 min
2,V00,1,PARAM,7,hGH
2,V00,1,PAR_RES,7,0.7
2,V00,1,PAR_UNIT,7,2108
2,V00,1,PAR_DEF,7,0.7
2,V00,1,PAR_COM,7,
2,V00,1,TESTNAME,8,Tests Simples
2,V00,1,TIME1,8,120 min
2,V00,1,PARAM,8,hGH
2,V00,1,PAR_RES,8,-1
2,V00,1,PAR_UNIT,8,2108
2,V00,1,PAR_DEF,8,-1
2,V00,1,PAR_COM,8,
2,V00,1,TESTNAME,9,Tests Simples
2,V00,1,TIME1,9,180 min
2,V00,1,PARAM,9,hGH
2,V00,1,PAR_RES,9,-1
2,V00,1,PAR_UNIT,9,2108
2,V00,1,PAR_DEF,9,-1
2,V00,1,PAR_COM,9,
2,V00,2,TESTNAME,0,Tests Stim
2,V00,2,TIME1,0,- 30 min
2,V00,2,PARAM,0,hGH
2,V00,2,PAR_RES,0,
2,V00,2,PAR_UNIT,0,2108
2,V00,2,PAR_DEF,0,
2,V00,2,PAR_COM,0,
3,V00,1,TESTNAME,1,Tests Couplés
3,V00,1,TIME1,1,-30 min
3,V00,1,PARAM,1,hGH
3,V00,1,PAR_RES,1,-1
3,V00,1,PAR_UNIT,1,2108
3,V00,1,PAR_DEF,1,-1
3,V00,1,PAR_COM,1,
3,V00,1,TESTNAME,2,Tests Couplés
3,V00,1,TIME1,2,0
3,V00,1,PARAM,2,hGH
3,V00,1,PAR_RES,2,1.2
3,V00,1,PAR_UNIT,2,2108
3,V00,1,PAR_DEF,2,1.2
3,V00,1,PAR_COM,2,
3,V00,1,TESTNAME,3,Tests Couplés
3,V00,1,TIME1,3,15 min
3,V00,1,PARAM,3,hGH
3,V00,1,PAR_RES,3,-1
3,V00,1,PAR_UNIT,3,2108
3,V00,1,PAR_DEF,3,-1
3,V00,1,PAR_COM,3,
3,V00,1,TESTNAME,4,Tests Couplés
3,V00,1,TIME1,4,30 min
3,V00,1,PARAM,4,hGH
3,V00,1,PAR_RES,4,2.5
3,V00,1,PAR_UNIT,4,2108
3,V00,1,PAR_DEF,4,2.5
3,V00,1,PAR_COM,4,
3,V00,1,TESTNAME,5,Tests Couplés
3,V00,1,TIME1,5,45 min
3,V00,1,PARAM,5,hGH
3,V00,1,PAR_RES,5,5.2
3,V00,1,PAR_UNIT,5,2108
3,V00,1,PAR_DEF,5,5.2
3,V00,1,PAR_COM,5,
3,V00,1,TESTNAME,6,Tests Couplés
3,V00,1,TIME1,6,60 min
3,V00,1,PARAM,6,hGH
3,V00,1,PAR_RES,6,4
3,V00,1,PAR_UNIT,6,2108
3,V00,1,PAR_DEF,6,4
3,V00,1,PAR_COM,6,
3,V00,1,TESTNAME,7,Tests Couplés
3,V00,1,TIME1,7,90 min
3,V00,1,PARAM,7,hGH
3,V00,1,PAR_RES,7,1.4
3,V00,1,PAR_UNIT,7,2108
3,V00,1,PAR_DEF,7,1.4
3,V00,1,PAR_COM,7,
3,V00,1,TESTNAME,8,Tests Couplés
3,V00,1,TIME1,8,120 min
3,V00,1,PARAM,8,hGH
3,V00,1,PAR_RES,8,2.4
3,V00,1,PAR_UNIT,8,2108
3,V00,1,PAR_DEF,8,2.4
3,V00,1,PAR_COM,8,
3,V00,1,TESTNAME,9,Tests Couplés
3,V00,1,TIME1,9,180 min
3,V00,1,PARAM,9,hGH
3,V00,1,PAR_RES,9,-1
3,V00,1,PAR_UNIT,9,2108
3,V00,1,PAR_DEF,9,-1
3,V00,1,PAR_COM,9,
3,V00,2,TESTNAME,0,Tests Simples
3,V00,2,TIME1,0,- 30 min
3,V00,2,PARAM,0,hGH
3,V00,2,PAR_RES,0,1.1
3,V00,2,PAR_UNIT,0,2108
3,V00,2,PAR_DEF,0,1.1
3,V00,2,PAR_COM,0,
4,V00,1,TESTNAME,1,Tests Couplés
4,V00,1,TIME1,1,-30 min
4,V00,1,PARAM,1,hGH
4,V00,1,PAR_RES,1,0.2
4,V00,1,PAR_UNIT,1,2108
4,V00,1,PAR_DEF,1,0.2
4,V00,1,PAR_COM,1,
4,V00,1,TESTNAME,2,Tests Couplés
4,V00,1,TIME1,2,0
4,V00,1,PARAM,2,hGH
4,V00,1,PAR_RES,2,0.8
4,V00,1,PAR_UNIT,2,2108
4,V00,1,PAR_DEF,2,0.8
4,V00,1,PAR_COM,2,
4,V00,1,TESTNAME,3,Tests Couplés
4,V00,1,TIME1,3,15 min
4,V00,1,PARAM,3,hGH
4,V00,1,PAR_RES,3,-1
4,V00,1,PAR_UNIT,3,2108
4,V00,1,PAR_DEF,3,-1
4,V00,1,PAR_COM,3,
4,V00,1,TESTNAME,4,Tests Couplés
4,V00,1,TIME1,4,30 min
4,V00,1,PARAM,4,hGH
4,V00,1,PAR_RES,4,1.3
4,V00,1,PAR_UNIT,4,2108
4,V00,1,PAR_DEF,4,1.3
4,V00,1,PAR_COM,4,
4,V00,1,TESTNAME,5,Tests Couplés
4,V00,1,TIME1,5,45 min
4,V00,1,PARAM,5,hGH
4,V00,1,PAR_RES,5,3.8
4,V00,1,PAR_UNIT,5,2108
4,V00,1,PAR_DEF,5,3.8
4,V00,1,PAR_COM,5,
4,V00,1,TESTNAME,6,Tests Couplés
4,V00,1,TIME1,6,60 min
4,V00,1,PARAM,6,hGH
4,V00,1,PAR_RES,6,4
4,V00,1,PAR_UNIT,6,2108
4,V00,1,PAR_DEF,6,4
4,V00,1,PAR_COM,6,
4,V00,1,TESTNAME,7,Tests Couplés
4,V00,1,TIME1,7,90 min
4,V00,1,PARAM,7,hGH
4,V00,1,PAR_RES,7,1.7
4,V00,1,PAR_UNIT,7,2108
4,V00,1,PAR_DEF,7,1.7
4,V00,1,PAR_COM,7,
4,V00,1,TESTNAME,8,Tests Couplés
4,V00,1,TIME1,8,120 min
4,V00,1,PARAM,8,hGH
4,V00,1,PAR_RES,8,1.3
4,V00,1,PAR_UNIT,8,2108
4,V00,1,PAR_DEF,8,1.3
4,V00,1,PAR_COM,8,
4,V00,1,TESTNAME,9,Tests Couplés
4,V00,1,TIME1,9,180 min
4,V00,1,PARAM,9,hGH
4,V00,1,PAR_RES,9,-1
4,V00,1,PAR_UNIT,9,2108
4,V00,1,PAR_DEF,9,-1
4,V00,1,PAR_COM,9,
4,V00,2,TESTNAME,0,Tests Simples
4,V00,2,TIME1,0,- 30 min
4,V00,2,PARAM,0,hGH
4,V00,2,PAR_RES,0,0.8
4,V00,2,PAR_UNIT,0,2108
4,V00,2,PAR_DEF,0,0.8
4,V00,2,PAR_COM,0,
5,V00,1,TESTNAME,1,Tests Stim
5,V00,1,TIME1,1,- 30 min
5,V00,1,PARAM,1,hGH
5,V00,1,PAR_RES,1,
5,V00,1,PAR_UNIT,1,2108
5,V00,1,PAR_DEF,1,
5,V00,1,PAR_COM,1,
5,V00,1,TESTNAME,2,Tests Stim
5,V00,1,TIME1,2,0
5,V00,1,PARAM,2,hGH
5,V00,1,PAR_RES,2,
5,V00,1,PAR_UNIT,2,2108
5,V00,1,PAR_DEF,2,
5,V00,1,PAR_COM,2,
5,V00,1,TESTNAME,3,Tests Stim
5,V00,1,TIME1,3,15 min
5,V00,1,PARAM,3,hGH
5,V00,1,PAR_RES,3,
5,V00,1,PAR_UNIT,3,2108
5,V00,1,PAR_DEF,3,
5,V00,1,PAR_COM,3,
5,V00,1,TESTNAME,4,Tests Stim
5,V00,1,TIME1,4,30 min
5,V00,1,PARAM,4,hGH
5,V00,1,PAR_RES,4,
5,V00,1,PAR_UNIT,4,2108
5,V00,1,PAR_DEF,4,
5,V00,1,PAR_COM,4,
5,V00,1,TESTNAME,5,Tests Stim
5,V00,1,TIME1,5,45 min
5,V00,1,PARAM,5,hGH
5,V00,1,PAR_RES,5,
5,V00,1,PAR_UNIT,5,2108
5,V00,1,PAR_DEF,5,
5,V00,1,PAR_COM,5,
5,V00,1,TESTNAME,6,Tests Stim
5,V00,1,TIME1,6,60 min
5,V00,1,PARAM,6,hGH
5,V00,1,PAR_RES,6,
5,V00,1,PAR_UNIT,6,2108
5,V00,1,PAR_DEF,6,
5,V00,1,PAR_COM,6,
5,V00,1,TESTNAME,7,Tests Stim
5,V00,1,TIME1,7,90 min
5,V00,1,PARAM,7,hGH
5,V00,1,PAR_RES,7,
5,V00,1,PAR_UNIT,7,2108
5,V00,1,PAR_DEF,7,
5,V00,1,PAR_COM,7,
5,V00,1,TESTNAME,8,Tests Stim
5,V00,1,TIME1,8,120 min
5,V00,1,PARAM,8,hGH
5,V00,1,PAR_RES,8,
5,V00,1,PAR_UNIT,8,2108
5,V00,1,PAR_DEF,8,
5,V00,1,PAR_COM,8,
5,V00,1,TESTNAME,9,Tests Stim
5,V00,1,TIME1,9,180 min
5,V00,1,PARAM,9,hGH
5,V00,1,PAR_RES,9,
5,V00,1,PAR_UNIT,9,2108
5,V00,1,PAR_DEF,9,
5,V00,1,PAR_COM,9,
5,V00,2,TESTNAME,0,Tests Simples
5,V00,2,TIME1,0,- 30 min
5,V00,2,PARAM,0,hGH
5,V00,2,PAR_RES,0,-1
5,V00,2,PAR_UNIT,0,2108
5,V00,2,PAR_DEF,0,-1
5,V00,2,PAR_COM,0,

Sortierung?

1)
die mitgeschickte Datei ist nicht so sortiert, wie im Proc Sort angegeben, diese ist nach "SubjectID Visit_Code EForm_cycle" sortiert.
2)
Wenn es nicht von 0 starten soll, dann darf man natürlich auch nicht bei FIRST.SubjectID m mit 0 initialisieren.

Wenn das nichts bringt, dann verstehe ich das Problem wohl nicht. Hilfreich wäre dann vielleicht eine Ergebnisdatei mit den Werten, die in Question_rep auch tatsächlich stehen sollen.

Gruß
Wolfgang

ok das war mein fehler. das

ok das war mein fehler. das oben war natürlich die ausgabedatei, welche nochmal anders sortiert war. das eigentliche SAS file ist schon richtig sortiert. ich werde es gleich richtig aus dem makro rausziehn...

Nochmal zurück zu der initialisierung der laufvariable:
Natürlich, ich hatte begonnen das Programm immer mit eins starten zu lassen. Dabei passiert es mir nur an einigen stellen dass die Durchnummerierung bei 2 losgeht und nicht bei eins, deswegen hab ichs mir 0 versucht *trial&error*. Was aber an anderen stellen natürlich das ganze mit 0 anfangen lässt. was ja auch logisch ist. das problem ist also dass irgednwo sofort zu beginn eines blockes der durchnummeriert werden soll schon einmal hochgezählt wird auf 2, anstatt bei eins anzufangen.

--- ok jetzt scheine ich das problem zumindest inhaltlich gefunden zu haben: die zeile die entscheidet ob ich hochzählen will steht nicht in der ersten zeile eines blocks, sondern in der 2ten. Kommt eben daher dass in der ersten zeile ja scohn die steht mit der ich im schritt davor die andere spalte erzeuge.

hm das mit dem Dateiupload nachträglich sehe ich leider immernoch nicht. ich schick mal ne mail :)

Hab jetzt vorerst hier versucht einen ausschnitt der datei hochzuladen. ist wie gesagt aber nur der anfang, aber sollte das problem kenntlich machen mit der nummerierung. ..

gut problem hat sich

gut problem hat sich erledigt :-)
trotzdem danke für die hilfe.

musste die erste zeile jedes blocks mit der zweiten jeweils vertauschen damit es richtig klappt.