Einfügen eines ausgewählten Spaltennamens in eine FormelBetreff: Einfügen eines ausgewählten Spaltennamens in eine FormelHallo gzmorgan0 ,
Das ist ein tolles Drehbuch. Wie muss das Skript geändert werden, um andere Formelschaltflächen wie Col Mean oder Col Std Dev hinzuzufügen?
Betreff: Einfügen eines ausgewählten Spaltennamens in eine Formelgzmorgan,
Du bist ein Zauberer. Ich habe beide von Ihnen dargestellten Methoden mit Erfolg ausprobiert. Noch wichtiger ist, dass ich mehr Skripttechniken gelernt habe. Vielen Dank.Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelZunächst ein paar Anmerkungen:
- oc ist eine Spaltenreferenz. Die Syntax oc( Connect Points(1) ) konnte von JMP nicht interpretiert werden.
- Es scheint, dass die im Skriptindex für den Overlay-Plot angezeigte Syntax den Spaltennamen erfordert, siehe Beispiel unten. Es wird auch akzeptiert:Name("Volume")(Connect Color (0) );
obj = Overlay Plot(
X( :Date ),
Y( :High, :Low, :Close, :Volume ),
Y Scale( Left, Left, Left, Right )
);
obj << Connect Points( 1 );
obj << :Volume( Connect Color( 0 ) );
obj << :Low( Connect Color( "Red" ) );
- Der Overlay-Plot verfügt über einige nette Funktionen, JMP-Entwickler würden jedoch wahrscheinlich die Verwendung von Graph Builder empfehlen. Für die Struktur Ihrer Datentabelle ist Overlay möglicherweise einfacher zu verwenden, daher werde ich Overlay verwenden.
- Das folgende Skript begann mit einer Teilmenge der Fußball-Datentabelle, keiner der von Ihnen hinzugefügten Spalten. Anschließend wird der gleitende Durchschnitt berechnet. Das Skript erstellt einen Overlay-Plot und erstellt mithilfe von Eval(Parse(EvalInsert())) die im Skriptindex angezeigte Syntax mit dem in Anführungszeichen gesetzten Namen und der Option zum Ausschalten von Punkten.
- Der zweite Teil des Skripts demonstriert eine alternative Methode. Aktivieren Sie Linien und Punkte für alle Overlay-Spalten.Verwenden Sie dann Xpath(), um eine Liste mit Referenzen auf die Liniensegmente und die Markierungssegmente zu erstellen.Um eine Linie zu deaktivieren, stellen Sie die Linienbreite auf 0 ein. Um Punkte zu deaktivieren, setzen Sie die Transparenz auf 0.Ich finde, dass die Arbeit mit den Segmenten eine einfachere Syntax verwendet.Obwohl Xpath() äußerst nützlich ist, wird es wahrscheinlich als fortgeschrittener angesehen.Hoffentlich hilft das.
Names default to here(1);
dt = current data table();
colnme = "Speed";
oc = Column(dt, colnme);
nc = dt << New Column( colnme || " Moving Average",
Numeric,
Formula(Col Moving Average(oc[],1,4,16) )
);
ovp = Overlay Plot( Y(oc, nc));
ovp << Connect Thru Missing(1);
ncnme = nc << get name;
//The syntax is ovp << :col( opt1);
Eval( Parse(EvalInsert("ovp << :name(\!"^ncnme^\!")(Show Points(0))" ) ) ) ;
//alternate method
ovl = Overlay Plot( Y(oc, nc));
ovl << Connect Thru Missing(1);
lines = ovl << Xpath("//LineSeg");
points = ovl << Xpath("//MarkerSeg");
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
lines[1] << Line width(2); //turn on line 1
wait(2);
lines[1] << Line width(0); //turn off line 1
wait(2);
points[2] << Transparency(0); //turn off points 2
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelIch setze meine Bemühungen fort. Ich habe viele Fortschritte gemacht.Ich füge einen ausgewählten Spaltennamen in meine Formel ein und kann jetzt mithilfe von MA-Parametern aus einem Dialogfeld ein Überlagerungsdiagramm der ausgewählten Spalte mit ihrem gleitenden Durchschnitt erstellen. Hübsch. Sehr schön. Ich verwende die Funktion „Overlay Plot“. Ich kann alle Punkte in beiden Diagrammen ändern, finde aber nicht heraus, wie ich nur eines der Attribute des Diagramms ändern kann.
Hier ist ein Codeausschnitt zur Veranschaulichung. Das funktioniert:
cn1 = colName || "";
cn2 = colName || " Moving Average";
dt << New Column( colName || " Moving Average",
Numeric,
Formula( Eval( Parse( formulaString ) ) )
);
oc = Column( cn1 );
nc = Column( cn2 );
nw2 << Close Window;
funny = Overlay Plot( Y( oc, nc ), );
funny << (Connect Points( 1 ));
Im resultierenden Diagramm sind sowohl der MA als auch die ursprünglichen Punkte miteinander verbunden.
Wenn ich jedoch die letzte Zeile ändere, um nur einen der Plots zu ändern, beispielsweise diesen, funktioniert es nicht:
funny << oc( Connect Points( 1 ) );
Es sind keine Punkte verbunden.
Daher wird „oc“ in der Funktion „Overlay Plot“ als eine der Y-Spalten erkannt, in der obigen Anweisung jedoch nicht.
Kann mir bitte jemand helfen? Meine geistige Gesundheit steht auf dem Spiel.
Ich habe eine Datentabelle angehängt, in die mein gesamtes Skript eingebettet ist.Es gibt ein zusätzliches kleines, automatisch generiertes Skript, um die Handlung so zu gestalten, wie ich es mir für das gesamte Skript wünsche; Ich konnte diesen Plot nur erstellen, indem ich die Legende manuell änderte.
Kevin
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelOK. Ich werde das so machen.
Vielen Dank,
Kevin
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelKein Problem. Aber ich würde die Methode von gz verwenden. Es ist robuster, da es Spalten mit Sonderzeichen im Namen verarbeitet.
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelDanke, GZ,
Ja, Ihre Lösung hat auch bei mir funktioniert. Ein guter Tipp ist das Überfüllen, wenn keine Spalte ausgewählt ist. Ich werde es in Zukunft nutzen.
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelDanke, Mike,
Ja, bei mir hat es tatsächlich funktioniert. Und ich habe weitere Skripttechniken gelernt.
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelIhr Skript funktioniert nur, wenn Ihre Spaltennamen keine Sonderzeichen enthalten. Wenn ja, muss die benannte Referenz :Name("string") sein. Außerdem wurde dem Skript eine Überprüfung hinzugefügt, ob eine Spalte ausgewählt wurde.
Names Default to Here(1);
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all, <<SET data="https://community.jmp.com/" type=""></SET>
Betreff: Einfügen eines ausgewählten Spaltennamens in eine Formel
Versuche dies. Die letzten beiden Zeilen des col list box()-Teils schienen ein Skript zu sein, was bedeutet, dass sie durch ein Semikolon (oder Leim) getrennt werden sollten.Die restlichen Zeilen sind durch Kommas getrennte Argumente des Col-Listenfelds. Der Teil „colName = ...“ des Col-Listenfelds ist hier auskommentiert, da er meiner Meinung nach nicht viel bewirkt hat. Greifen Sie lieber während des Button-Box-Teils des Skripts darauf zu. Sie können die Tabellenvariable bei Bedarf wieder hinzufügen.
Es wäre besser, das Listenfeld nur numerische Spalten laden zu lassen. Ich konnte mich nicht erinnern, wie man das richtig macht. Derzeit wird alles in das Listenfeld geladen. Ich habe min/max col() in max selected geändert. Dh nicht mehr als 1 auf einmal.
Was den Formelteil angeht, brauche ich normalerweise ein wenig Versuch und Irrtum, um die Zeichenfolgen an die gewünschte Stelle zu bringen. Das scheint zu funktionieren.
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,//numeric,
//min col( 1 ),
max selected( 1 )//,
//colname = Eval Expr (Expr(x << get selected)[1])//,
//dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
colName = Char( (x << get selected)[1] );
//myCol = column(colName);
formulaString = "Col Moving Average( :"|| char(colName) ||", 0, 4, 0 )";
dt << New Column( colName || " Movin Average",
Numeric,
//Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
Formula( eval(parse(formulaString)) )
)
)
);
Betreff: Einfügen eines ausgewählten Spaltennamens in eine FormelIch versuche herauszufinden, wie ich meine Spaltenauswahl aus einem Dialogfeld richtig in eine Formel übertragen kann. Ich habe mir viele Diskussionen und Beispiele aus dem Skriptbuch angesehen und eine Menge Dinge ausprobiert. Noch keine Würfel. Wie Sie im Skript sehen können, möchte ich eine Spalte auswählen und eine neue Spalte basierend auf der Formel für den gleitenden Durchschnitt der Spalte erstellen. Ich würde mich über Hilfe freuen.
Hier ist mein neuster Versuch:
dt = Current Data Table();
colname = .;
New Window( "Select Column",
x = Col List Box(
Data Table( dt << get name ),
all,
min col( 1 ),
max col( 1 ),
colname = Eval Expr (Expr(x << get selected)[1]),
dt << New Table Variable( "Selected Column", (x << get selected)[1] )
),
Button Box( "Moving Average",
dt << New Column( Char( (x << get selected)[1] ) || " Movin Average",
Numeric,
Formula( Col Moving Average( Name Expr(colname), 0, 4, 0 ) )
)
)
);