Fehler: „Ausdruck passt nicht zu den verfügbaren Spaltentypen“<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo allerseits,
Im folgenden Code erhalte ich die Fehlermeldung „Ausdruck passt nicht zu verfügbaren Spaltentypen“ und sie tritt während der Formelauswertung auf.
Ich versuche nur, auf dieselbe Tabelle zu verweisen, zu der ich eine neue Spalte hinzufüge, z. B. indem ich zwei Spalten innerhalb der Tabelle mit dem Namen „dt“ subtrahiere, zu der ich eine neue Spalte hinzufüge ... Ich kann nicht herausfinden, warum es nicht funktioniert.
dt = myTable();
cols = dt << GetColumnNames("String");
//Warten(3);
For(c=1, c<=NItems(cols), c++,
If( StartsWith(cols, „HTOL“),
dt << Neue Spalte(cols|| „ Δ“, Numerisch, Kontinuierlich, Formel( Auswertungsliste( Spalte(dt,4)) ) );
);
);
Danke
jeff
Betreff: Fehler: „Ausdruck passt nicht zu den verfügbaren Spaltentypen“Danke PMroz! Gestern Abend habe ich dieses Problem schließlich mit einem Wortlaut gelöst, der Ihrem ziemlich ähnlich ist – ich habe etwa Folgendes verwendet:
Ich glaube, ich habe Parse verwendet. Ich kann mich nicht erinnern, ob ich eval verwenden musste oder nicht, ich bin mir zu etwa 60 % sicher, dass ich es getan habe.
Wenn mich jemand dazu braucht, antworten Sie bitte darauf und ich werde die genaue Syntax herausfinden.
dt << neue Spalte( parse(cols|| " Δ"), Numerisch, Kontinuierlich, Formel(:^cols^ - :Daten 0))
Betreff: Fehler: „Ausdruck passt nicht zu den verfügbaren Spaltentypen“Ähnliche Technik wie @Stephen.pearson:
dt = Neuer Tisch ( "Demo" , Zeilen hinzufügen ( 3 ) ,
Neue Spalte ( „Daten 0“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Werte festlegen ( [ 1 , 2 , 3 ] ) ) ,
Neue Spalte ( „Daten 100“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Werte festlegen ( [ 4 , 5 , 6 ] ) ) ,
Neue Spalte ( „Daten 200“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Werte festlegen ( [ 7 , 8 , 9 ] ) )
) ;
Spalten = dt << Spaltennamen abrufen ( „Zeichenfolge“ ) ;
für ( C = 1 , C <= nitems ( Spalten ) , C ++,
Wenn ( beginnt mit ( Großbuchstaben ( Spalten [ C ]) , "DATEN" ) ,
neuer_Spaltenausdruck = evalinsert ( "\[dt << neue Spalte( cols|| „ Δ“, Numerisch, Kontinuierlich, Formel(:^cols^ - :data 0))]\") ;
evalu ( analysieren ( neuer_Spaltenausdruck )) ;
) ;
) ;
Betreff: Fehler: „Ausdruck passt nicht zu den verfügbaren Spaltentypen“Spalte(dt,c) ist nicht dasselbe wie :Daten 100 was die Formel betrifft.
Eine Möglichkeit, diesen Code zum Laufen zu bringen, besteht darin, dynamisches JSL zu verwenden, das das JSL auswertet, bevor es ausgeführt wird.
// Ich bin mir nicht sicher, ob dies die richtige Syntx ist, aber Sie haben die Idee
TargetColumn = Column(dt,c) <
//dynamischer Ersatz, um innerhalb der if-Klausel zu gehen
Bewertung(
Analysieren(
Evaluierungseinfügung(
„\[
dt << Neue Spalte(cols|| „Delta“, Numerisch, Kontinuierlich, Formel( :^TargetColumn^ - :data 0 ) );
]\"
) ) );
Wenn Ihre Spaltennamen Sonderzeichen enthalten, müssen Sie möglicherweise :Name(" verwenden. ^Zielspalte^ ") in der Formel. Dies kann immer noch zu seltsamen Ergebnissen führen, wenn der Spaltenname ^/-+*-Symbole enthält, da die Formel nicht zuverlässig ausgewertet wird.
Betreff: Fehler: „Ausdruck passt nicht zu den verfügbaren Spaltentypen“Danke für die schnelle Antwort!!
Ich habe eine Tabelle „dt“, die Datenspalten enthält.Sie können „Daten 0“ oder „Daten 100“ oder „Daten 200“ sein, bis zu einer unbekannten Zahl.
Wie auch immer die Spalte heißt, ich möchte die Spalte „Daten 0“ davon subtrahieren – auch wenn die Spalte „Daten 0“ ist (so dass diese Spalte nur aus Nullen besteht, die anderen wie „Daten 100“ jedoch nicht nur aus Nullen bestehen). .
Also habe ich versucht, eine for-Schleife zu haben, die jede Spalte überprüft, und wenn sie zum Beispiel „Daten 100“ heißt, wollte ich, dass automatisch eine Spalte „Daten 100 Delta“ mit der Formel darin erstellt wird: (Daten 100 - Daten 0).
Ich dachte, ich könnte das wie folgt machen:
dt = myTable();
cols = dt << GetColumnNames("String");
//Warten(3);
For(c=1, c<=NItems(cols), c++,
If( StartsWith(cols, "Daten"),
dt << Neue Spalte(cols|| „Delta“, Numerisch, Kontinuierlich, Formel( Spalte(dt,c) - :data 0 ) );
);
);
Die „:data 0“-Referenz scheint zu funktionieren – sie wird die kopierten „:data 0“-Daten in die Spalte „data 100 delta“ einfügen, aber wenn ich die „column(dt,c)“ einfüge, versuche ich, die zu erhalten Datenspalte 100, es kommt zu einem Fehler.....
Danke!!
Betreff: Fehler: „Ausdruck passt nicht zu den verfügbaren Spaltentypen“Jeff,
Sie haben Recht, das Problem ist „eval list( Column(dt,4) )“. Eval List() erwartet, dass es eine auszuwertende Liste gibt. zum Beispiel: {1,2,3}.
Ist das Ihre Absicht? Sind die Inhalte von Column(dt, 4) Listen? Da diese Spalte höchstwahrscheinlich numerische Werte enthält, wird ein Fehler ausgegeben.
Selbst dann akzeptieren JMP-Datentabellenspalten nur drei Datentypen: Numerisch, Zeichen und Zeilenstatus. Wenn Sie tatsächlich Listen in jeder Zelle von Spalte (4) hätten, wären es tatsächlich Zeichenfolgen. dh „{1,2,3}“. In diesem Fall müsste man zuerst die Zeichenfolge analysieren, um sie in einen Ausdruck umzuwandeln, und DANN würde EvalList() funktionieren.
Die Frage ist: Was wollten Sie mit dieser Formel bewirken?