Matrixoperationen mit By-VariablenIch hoffe, dass es diese Funktion gibt, andernfalls wäre es eine großartige Ergänzung. Ich suche nach der Möglichkeit, Matrixoperationen mithilfe von Variablen durchzuführen. Derzeit ist diese Funktion meines Wissens nur in Datentabellen vorhanden. Mit dieser Funktion können Sie Matrizen sortieren, ohne Schleifen zu verwenden.
A = Random Index(10^4,10^2);
B = Shape(A,10,10);
C = Sort Descending(B); // Fails since function only supports vector or list
D = Rank(B);// Fails since function only supports vector or list
Automatisierung und SkripterstellungBetreff: Matrixoperationen mit By-Variablen@gzmorgan0 ,
Ihre Interpretation ist ziemlich genau. Ich stimme Ihnen zu, was JMP bietet manche Nach-Spalten-Funktionen. Mein Wunsch war es, diese über den Mittelwert und die Summe hinaus zu erweitern.
Was Ihre Implementierung dieser Funktionen angeht, möchte ich keine Schleifen verwenden, wenn es möglich ist, dies zu vermeiden. Wenn eine integrierte Funktion sie bereits verwendet, sind sie normalerweise optimiert und ich bin damit einverstanden. Wenn es jedoch eine Möglichkeit gibt, die Verwendung einer Schleife zu vermeiden, würde ich diese vermeiden wollen.
Was nun die Rangfolge und Sortierung betrifft, ist die andere Sprache, in der ich Sortierung nach Zeile gesehen habe, Matlab ( https://www.mathworks.com/help/matlab/ref/sort.html ). Ich habe auch versucht, SAS zu lernen, und eines der Dinge, die ich gesehen habe, ist, dass man bei SAS den Datensatz sortiert und eine Zeilennummer hinzufügt, um den Rang zu ermitteln, was tatsächlich Sinn macht. Die Absicht hinter meiner Anfrage nach einer Zeilensortierung in JMP neben einer Rangfolge besteht also darin, eine solche Hebelwirkung zu erzielen, bei der ein Benutzer einfach den Datensatz sortieren kann und mithilfe der Funktion row() automatisch über die Rangfolge verfügt.
Ein Beispiel, das ich mir angesehen habe und bei dem ich eine Verwendung für die oben genannte Anfrage gesehen habe, ist das Ranking von Zeitreihendaten (stündlich/täglich/wöchentlich).
Derzeit ist die einzige mir bekannte Möglichkeit, die Ränge für einen solchen Datensatz zu ermitteln, darin, ihn zurück in eine Datentabelle zu übertragen und Col Rank(), Col Rank() und Col Number() zu verwenden.
A = Random Shuffle(Random Index(10^3,240)); // random hourly data for 10 days
dt = As Table(A);
As Column(dt,"Col1") << Set Name("TestVal");
dt << New Column("Day",Numeric,Continuous,Formula(Ceiling(Row()/24)))
<< New Column("RankHourByDayAsc",Numeric,Continuous,Formula(Col Rank(:TestVal,:Day)))
<< New Column("RankHourByDayDesc",Numeric,Continuous,Formula(Col Number(:TestVal,:Day) + 1 - Col Rank(:TestVal,:Day)));Betreff: Matrixoperationen mit By-VariablenIch gehe davon aus, dass sich Ihre Anfrage „Nach Variable“ auf „Nach Spalte“ bezieht. JMP bietet bereits mehrere spaltenbezogene Funktionen: V Mittelwert, V Min usw.
Ich sehe einen Vorteil von V-Rang, aber V-Sortierung absteigend wäre seltsam.Sobald Sie die Matrix erstellt haben (erstellt mit „Form“ oder „Als Matrix abrufen“), werden die Elemente in einer Zeile normalerweise „verknüpft“, also zusammengehalten. Was erwarten Sie von Sort Descending(B)? Ich kenne nicht alle Sprachen, aber ich habe in Matlab nur eine Sortierung nach Zeilen gesehen, bei der das erste Element in der Zeile verwendet wird, um die Zeilenreihenfolge anzugeben. Haben Sie ein Beispiel in einer anderen Sprache oder einem Statistikpaket, das sortiert und die Zeilenverknüpfung nicht beibehält?
Hier ist ein Beispiel für die ByColMat()-Funktion. Kommentieren Sie „Verwendung“ aus und testen Sie es. Hinweis „Absteigend sortieren“ unterbricht die Zeilenverknüpfung
Names Default to Here(1);
//=================================================================================
byColMat = Function({mat, expr_name}, {nc, imat, i, rslt},
//mat is a matrix, expr_name is a string of a valid vector function
//returns a matrix typically a row vector if the name_expr function returns 1 value
//or a matrix ofd the same size. Summary is a special case
nc = ncol(mat);
if(expr_name=="Summary",
imat=J(10,nc,empty());
imat[1,0] = V Mean(mat);
imat[2,0] = V Std(mat);
imat[3,0] = V Min(mat);
imat[4,0] = V Max(mat);
imat[5,0] = V Sum(mat);
For(i = 1, i<=nc, i++,
imat[6,i] = Quantile(.25, mat[0,i]);
imat[7,i] = Quantile(.50, mat[0,i]);
imat[8,i] = Quantile(.75, mat[0,i]);
imat[9,i] = imat[8,i] - imat[6,i];
imat[10,i] = nc - Nmissing(mat[0,i]);
);
Write("Stats are: Mean, Std Dev, Min, Max, Sum, Q25, Median, Q75, IQR, N");
, //else
imat=[];
mexpr = parse(expr_name || "(mat[0,i])");
For(i = 1, i<=nc, i++,
imat ||= eval(mexpr)
);
);//end if
imat
); //end function
/* Usage Example
//create a random matrix to emulate a data matrix
A = J(10,10, RandomInteger(1,10^4));
show(A, byColMat(A, "Summary"));
show(A, byColMat(A, "Sort Descending"));
show(A, byColMat(A, "Rank"));
*/