Gibt es in JSL einen effizienteren Weg als in einer Schleife?Nachdem Sie jm nach der Altersspalte sortiert haben, fügen Sie eine neue Spalte hinzu, und ermitteln Sie das Alter der nebeneinander liegenden Zeilen. Das Alter wird nicht gleichzeitig zurückgegeben. 1. Ich versuche, selbst zu fahren und sich langsam zu fühlen Dich sehr!
dt = Open ("$ SAMPLE_DATA / Big Class.jmp");
Neue Spalte ("neu", numerisch, fortlaufend, Breite (8));
dt [1, "Alter"] = 1;
für (i = 1, i <= Col Number (1), i ++,
if (dt [i, "age"] == dt [i-1, "age"], dt [i, "new"] = 0, dt [i, "new"] = 1);
);

Re: Gibt es in JSL einen effizienteren Weg als in einer Schleife?Vielen Dank! Ich werde den Beispielvergleich später verwenden.Re: Gibt es in JSL einen effizienteren Weg als in einer Schleife?Beachten Sie, dass das von Ihnen eingefügte Skript nicht mit dem Skript im Screenshot übereinstimmt.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Sort( By( :age ), Order( Ascending ), Replace Table );
dt << New Column("new",Numeric,Continuous,Width(8));
t0 = hptime();
dt[1,"new"]=1;
for(i=2,i<=Col Number(1),i++,
if(dt[i,"age"]==dt[i-1,"age"],dt[i,"new"]=0,dt[i,"new"]=1);
);
t1 = hptime();
dt << New Column("new2",Numeric,Continuous,Width(8));
t2 = hptime();
column(dt, "new2") << set each value(
If(row() == 1, 1,
:age == Lag(:age,1), 0,
//else
1)
);
t3 = hptime();
show(t3-t2, t1-t0); <BR /><BR />//The results will be different each time, but the second method takes less than 50% of the time <BR />//compared to the for loop.<BR />//t3 - t2 = 257; t1 - t0 = 679;<BR /><BR /><BR />