Verwenden einer FOR-Schleife in der Formel zum Erstellen einer neuen Spalte<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo Leute, ich habe eine Frage dazu, wie ich eine Reihe von Spalten, die in meiner Tabelle erstellt wurden, zu einer neuen Spalte kombinieren kann, die beschreibt, ob eine dieser Spalten einen bestimmten Zeichenwert hat ("gescreent").
Derzeit werden meine Datensätze mit einem Skript analysiert, das "n" neue Spalten hinzufügt, die die Zeichenwerte "screened" und "unscreened" basierend auf Formeln im Skript enthalten.
Mein Ziel ist es, einen letzten Schritt in das Skript aufzunehmen, der eine neue Spalte hinzufügt, die den Wert in jeder der "n" neuen Spalten auswertet, und wenn für jede Zeile eine dieser Spalten "gescreent" wird, dann wird diese Zeile als gescreent gekennzeichnet .
Wenn die Anzahl der neuen Spalten immer gleich wäre, würde ich einfach eine lange If-Anweisung schreiben und den Wert in jeder Spalte überprüfen. Ich muss es jedoch skripten, um die Anzahl der Spalten „n“ zu betrachten. Ich dachte, eine FOR-Schleife innerhalb einer Forumula zu verwenden, z. B. so etwas wie:
dt << New Column("All_screens",character,nominal,setformula(
If( For( i = 1, i <= N Elemente ( individuelleScreenColumns ), einzelne ScreenColumns == "Screened"), ---> brauchen etwas Magie, so dass, wenn eine der Screening-Spalten screen enthält, dann ---> "Screened", "Unscreened" ) );
Aber da FOR-Schleifen keinen Wert zurückgeben, konnte ich diese Magie nicht herausfinden. Hat jemand irgendwelche Gedanken?
Vielen Dank,
--Pfirsich
Betreff: Verwenden einer FOR-Schleife in der Formel zum Erstellen einer neuen SpalteDie Implementierung von zeilenweisen Operationen über eine unbekannte Anzahl von Spalten in Spaltenformeln ist nicht sehr einfach (jedoch ist keine Magie erforderlich).
Im Folgenden finden Sie einige Ideen, die lokale Variablen nutzen:
// Nur eine Beispieltabelle
n = 5 ;
Nr = 10 ;jedoch
dt = Neue Tabelle ( "Screening-Zusammenfassung" , Zeilen hinzufügen ( Nr ) , Mehrere Spalten hinzufügen ( "X" , n , Charakter )) ;
Zum ( ich = 1 , ich <= n , ich ++,
Spalte ( dt , ich ) << Legen Sie jeden Wert fest ({ "gescreent" , "ungeprüft" }[ 1 + ( Zufällige ganze Zahl ( 1 , Nr ) > 1 )])
) ;
// Neue Spalte, die angibt, ob eine Spalte "screened" enthält
dt << Neue Spalte ( "gescreent" ,
Charakter ,
Formel (
Lokal ({ ich = 0 , n = N Spalte ( Aktuelle Datentabelle ()) - 1 } ,
Wenn ( Enthält ( Wiederholen ({ ich ++ ; Spalte ( ich )[]} , n ) , "gescreent" ) ,
"gescreent"
)
)
)
) ;
// Dasselbe, aber mit einer For()-Schleife; weniger sauberer Code, aber wahrscheinlich effizienter als Repeat() für große n
// weil keine Zwischenlisten aufgebaut werden
dt << Neue Spalte ( "Geprüft 2" ,
Charakter ,
Formel (
Lokal ({ ich , n = N Spalte ( Aktuelle Datentabelle ()) - 2 , s = "" } ,
Zum ( ich = 1 , ich <= n , ich ++,
Wenn ( Spalte ( ich )[] == "gescreent" ,
s = "gescreent" ;
Unterbrechung () ;
)
) ;
s ;
)
)
) ;
// Alternativ Nr. von "screened" zurückgeben
dt << Neue Spalte ( "Anzahl der Gescreenten" ,
Numerisch ,
Formel ( Lokal ({ ich = 0 , n = N Spalte ( Aktuelle Datentabelle ()) - 3 } , Summe ( Wiederholen ({ ich ++ ; Spalte ( ich )[] == "gescreent" } , n )))) ) ;
Betreff: Verwenden einer FOR-Schleife in der Formel zum Erstellen einer neuen Spaltedanke Jim. Da ich die Anzahl der Spalten nicht kenne, werde ich versuchen, Ihre Gleichung mit einer for-Schleife in ein expr() zu setzen und diese dann mit einem eval() des in der for-Schleife generierten Ausdrucks in die if-Anweisung zu verschieben .
Betreff: Verwenden einer FOR-Schleife in der Formel zum Erstellen einer neuen SpalteIch verwende eine Boulianische Summierung, um das Problem zu lösen, von dem Sie sprechen.Wenn Sie 4 Spalten haben, a, b, c, d, habe ich eine Formel verwendet von:
If(sum(a=="gescreent",b=="gescreent",c=="gescreent",d=="gescreent")>0, "gescreent","")