Ich versuche zum ersten Mal, mit dem Anwendungs-Builder ein JMP-Add-In zu entwickeln, stecke aber beim JSL-Scripting wie unten beschrieben fest:
Einige Hintergründe:
Die Schnittstelle wurde unter der Registerkarte „Dialog“ erstellt.
Es gibt drei Bedienfeldfelder mit den Titeln „Spalten“, „Rollen“ und „Aktion“ sowie den Variablennamen „SpaltenPanel“, „RollenPanel“ und „AktionsPanel“.
Unter dem Bereich „Spalten“ habe ich ein Spaltenlistenfeld (Alle) mit dem Variablennamen „ColList“ hinzugefügt, das alle Spalten in der geöffneten Datentabelle einbezieht.
Unter dem Rollenbereich habe ich drei Spaltenlistenfelder und drei Schaltflächenfelder hinzugefügt:
Die Variablennamen für die erste, zweite und dritte Col-List-Box lauten ResponseColList, FactorColList bzw. BlockColList.
Die Variablennamen für die erste, zweite und dritte Button-Box lauten „ResponseButton“, „FactorButton“ bzw. „BlockButton“.
Die Titel für das erste, zweite und dritte Schaltflächenfeld lauten jeweils „Antwort“, „Faktor“ und „Block“.
Unter dem Aktionsbereich habe ich drei Schaltflächenfelder mit den Titeln „OK“, „Entfernen“ und „Abbrechen“ sowie den Variablennamen „OKButton“, „RemoveButton“ und „CancelButton“ hinzugefügt.
Wenn ich auf die Schaltfläche „Antwort“ klicke, werden die Spalten mit den Attributen „A“, „B“, „C“, „D“ und „E“ aus ColList hinzugefügt.
Wenn ich auf die Schaltfläche „Faktor und Blockieren“ klicke, werden auf ähnliche Weise die Spalten „Site“ und „Personen“ aus ColList hinzugefügt.

Skripte:
//Part I
//Places selected columns into Role panel
On Response = Function({},
ResponseColList << Append( AllColList << Get Selected)
);
//Places selected columns into Factor panel
On Factor = Function({},
FactorColList << Append( AllColList << Get Selected)
);
//Places selected columns into Block panel
On Block = Function({},
BlockColList << Append( AllColList << Get Selected)
);
// Program the OK Button
On OK = Function({},
Response = ResponseColList << Get Items;
Factor = FactorColList << Get Items;
Block = BlockColList << Get Items;
// Get the current data table
dt = Current Data Table();
// Perform principal component analysis
pca = dt << Principal Components(
Y( Eval List( Response ) ),
Estimation Method( "NIPALS" ),
Standardize( "Standardized" )
);
pca << Save Principal Component Values( 3 );
pca << Close Window();
// Create a subset and delete columns "Prin1", "Prin2" and ""Prin3" in "dt"
dt << Subset(
Output Table("MET"),
All rows,
columns(Eval List(Block), Eval List(Factor), :Prin1, :Prin2, :Prin3)
);
dt << Delete Columns( "Prin1" ) << Delete Columns( "Prin2" ) << Delete Columns( "Prin3" );
// Standardize column attributes and create a data table "MET"
Current Data Table(Data Table("MET"));
For Each({col, index}, {:Prin1, :Prin2, :Prin3},
col << Format("Fixed Dec", 12, 2)
);
MET = Data Table( "MET" );
//Part II
//Get the levels in the Factor column
factorLevels = Associative Array(MET, Column(Eval List(Factor))) << Get Keys;
level1 = factorlevels[1];
level2 = factorlevels[2];
// Create two subsets named "Group1" and "Group2"
MET << Select Where( Column(Eval List(Factor)) == level1 ) << Subset( Output Table( "Group1" ), Selected Rows( 1 ), Selected columns only( 0 ) );
MET << Select Where( Column(Eval List(Factor)) == level2 ) << Subset( Output Table( "Group2" ), Selected Rows( 1 ), Selected columns only( 0 ) );
Group1 = Data Table( "Group1" );
Group2 = Data Table( "Group2" );
// Access the Site levels in "Group1" and "Group2"
Site_level1 = Column( Group1, "Site" ) << Get Values;
Site_level2 = Column( Group2 "Site" ) << Get Values;
);Ich kann die Skripte aus Teil I erfolgreich ausführen, aber in Teil II treten immer wieder Fehler auf. Ich wäre daher für jede Hilfe beim Debuggen des Codes sehr dankbar.
Ein weiteres Ziel besteht hier darin, Datensätze mit unterschiedlichen Attributnamen (z. B. Attribut „F“, „G“ usw.) zu verarbeiten. Ich möchte sicherstellen, dass das Skript die ausgewählten Spaltennamen dynamisch verwendet, anstatt bestimmte Namen fest zu codieren.
Danke schön!
Welche Teile von Teil 2 schlagen fehl und welche Fehler treten auf?
Das assoziative Array – mit einer Datentabelle als erstes Argument?
Names Default to Here(1);
MET = Open( "$SAMPLE_DATA/Big Class.jmp" );
Factor={"height", "weight"};
Associative Array(MET, Column(Eval List(Factor)))