Hallo zusammen.
Ich habe einen JSL-Code, dessen Ausführung für größere Datensätze lange dauert.
Der Code führt eine for-Schleife innerhalb einer for-Schleife aus, um eine Liste eindeutiger Bedingungen zu füllen. Ich suche nach einem schnelleren Weg, dies zu tun.
Die Liste dient mehreren Zwecken. Erstens dient es als Zähler dafür, wie viele eindeutige Bedingungen in einem Datensatz vorhanden sind, und zweitens verwende ich diese Liste, um kleinere Listen zu erstellen und Spalten in einer neuen Tabelle zu füllen. Dazu wird ein String in eine Liste umgewandelt, indem jedes Element durch ein „”,“ getrennt wird.
Ich habe einen Dummy-Datensatz sowie den Code beigefügt, der den ersten „Zweck“ der Liste abdeckt.
start=tick seconds();
dt = current data table();
dt << new column("concat_factors");
condition_list = {};
for(x=1, x<=nrows(dt),x++,
column(dt, "concat_factors")[x] =
char(column(dt, "X__2")[x]) || "," ||
char(column(dt, "X__11")[x]) || "," ||
char(column(dt, "X__12")[x]) || "," ||
char(column(dt, "X__15")[x]) || "," ||
char(column(dt, "X__4")[x]);
if(x==1,
insert into(condition_list, char(column(dt, "concat_factors")[x]));
);
if(x!=1,
found = 0;
for(y=1,y<=nitems(condition_list),y++,
if(char(condition_list[y]) == char(column(dt, "concat_factors")[x]),
found = 1;
);
);
if(found == 0,
insert into(condition_list, char(column(dt, "concat_factors")[x]));
)
);
);
end=tick seconds();
runtime=end-start;
print(runtime);
Danke im Voraus!
Br. Anders
Versuchen Sie diesen Ansatz:
start=tick seconds();
dt = current data table();
dt << new column("concat_factors");
for each row(
column(dt, "concat_factors") =
char(column(dt, "X__2")) || "," ||
char(column(dt, "X__11")) || "," ||
char(column(dt, "X__12")) || "," ||
char(column(dt, "X__15")) || "," ||
char(column(dt, "X__4"));
);
condition_list = Associative Array( column(dt, "concat_factors") ) << Get Keys;
end=tick seconds();
runtime=end-start;
print(runtime);
Ich denke, dass die optimiert Für jede Reihe() Funktion könnte schneller sein. Außerdem scheint es, als würden Sie viel Zeit damit verbringen, nur nach einem neuen eindeutigen Wert zu suchen. Die Assoziatives Array() Konstrukt ist sehr effizient darin, nur eindeutige Schlüssel hinzuzufügen.