jsl-Skript zum Umcodieren mehrerer SpaltenVerehrte Gäste,
Ich versuche, mehrere Spalten mit dem folgenden Skript neu zu codieren (auch im Anhang zusammen mit einer Beispieldatentabelle). Ich habe mehrere Änderungen versucht, aber es funktioniert nicht. Die Werte in den Spalten verschwinden einfach, anstatt neu kodiert zu werden.
Ich freue mich über jede Hilfe.
Danke vielmals,
Marcello.
dt3 = Current Data Table();
n3 = dt3 << Get Column Names();
Show( n3 );
lstColNames_n3 = dt3 << Get Column Names();
Show( lstColNames_n3 );
Show( lstCols_n3 );
lstCols_n3 = {};
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
colName = lstColNames_n3[i];
col = Column( dt3, i );
Insert Into( lstCols_n3, col );
);
Show( lstCols_n3 );
For Each Row(
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
As Column( lstColNames_n3[i] ) = Match( As Column( lstColNames_n3[i] ),
"1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"
)
)
);
SkripterstellungBetreff: jsl-Skript zum Umcodieren mehrerer SpaltenVielen Dank!
Betreff: jsl-Skript zum Umcodieren mehrerer SpaltenEine Problemumgehung wäre das Erstellen einer neuen Spalte mit einer Formel basierend auf der Spalte, die Sie neu codieren möchten.
Dann lösche die ursprüngliche Spalte
Betreff: jsl-Skript zum Umcodieren mehrerer SpaltenDanke vielmals!
Betreff: jsl-Skript zum Umcodieren mehrerer SpaltenHier ist die Lösung mit der in JSL geschriebenen Recode-Funktion. Sie ist viel schneller als die zeilenweise Verarbeitung
Names Default To Here( 1 );
dmdt = current data table();
nc = dmdt << get column names( Character );
For( i = 1, i <= N Items( nc ), i++,
col = Column( dt, nc[i] );
colname = col << getname();
Eval(
Parse(
Eval Insert(
"\[
dmdt << Recode Column(
:Name("^colname^"),
{Map Value( _rcOrig,
{ "1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"},
Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( :Name("^colname^") )
);
]\"
)
)
);
);
Betreff: jsl-Skript zum Umcodieren mehrerer SpaltenVielen Dank, Ihr Code mit dem assoziativen Array hat perfekt funktioniert.
Ich habe auch die andere Option ausprobiert, indem ich hinzugefügt habe
Match(As Column( lstColNames_n3[i])[Row()],
aber das hat nicht funktioniert.
Aber ich habe mein Problem gelöst.
Danke vielmals.
Betreff: jsl-Skript zum Umcodieren mehrerer SpaltenIch habe meine vorherige Antwort bearbeitet, es sollte bei der Umcodierung helfenBetreff: jsl-Skript zum Umcodieren mehrerer SpaltenIch müsste Werte umcodieren. Vielen Dank.
Betreff: jsl-Skript zum Umcodieren mehrerer SpaltenMüssen Sie Werte neu codieren oder könnten Sie möglicherweise Spalteneigenschaft-Wertbeschriftungen verwenden (auf diese Weise verlieren Sie nicht die Originaldaten), Beispiel: Kodieren Sie mehrere Spalten mit JSL-Skript neu
Bearbeiten:
Und wenn Sie sie an Ort und Stelle neu codieren müssen, gibt es mehrere Möglichkeiten, dies zu tun (ich würde Associative Array verwenden):
Names Default To Here(1);
dt3 = current data Table ();
n3 = dt3 << Get Column Names(string);
show(n3);
//create associative array to use matching keys to values
matchAa = Associative Array(
{"1","2","3","4","5"},
{"too low","too low","right","too high","too high"}
);
show(matchAa);
//loop over column names
For(i = 1, i <= N Items(n3), i++,
//refer to column and use set each value to update values
Column(dt3, n3[i]) << Set Each Value(
matchAa[AsColumn(n3[i])[Row()]]
);
);
Und für Ihre Lösung gibt es meiner Meinung nach ein Problem darin, wie Sie auf Werte in der Match-Funktion verweisen, und Sie müssen [Row()] hinzufügen, um einzelne Werte für Matching zu erhalten
Match(As Column( lstColNames_n3[i])[Row()],
Edit2:
Vollständiges Beispielskript als Anhang hinzugefügt