Mehr zur Subset-Erstellung<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo, ich beziehe mich auf den Beitrag https://communities.sas.com/message/166376#166376 ab Mai diesen Jahres.
Das Beispiel erklärt, wie Sie eine neue Datentabelle erstellen, indem Sie 1) zuerst einen Datenfilter hinzufügen und 2) dann Untereinstellungen vornehmen:
dt = Öffnen (BigClass);
dt << Datenfilter (add filter(columns(:age),where(:age=={12,13}), Mode (select(1)));
sub1 = dt<
Als Ergebnis wird eine Datentabelle mit dem Namen "Regionen" erstellt. Wie erwartet.
Ich habe ein ähnliches Beispiel mit meinem eigenen Datensatz erstellt (das BigClass-Beispiel funktioniert!!), das für mich nicht gut funktioniert. Ich vermute, ich habe da etwas missverstanden. Hier ist mein Programmablauf beigefügt.
Der Unterschied zwischen dem BigClass-Beispiel und meinem Beispiel besteht darin, dass der Datenfilter nicht ausgewählt wird, wenn ich das gesamte Skript ausführe. (Ich habe das Laden der Datei aus einer Excel-Datei weggelassen, um Ihnen den Originalcode zusenden zu können, der bestimmte Namen enthielt). Zur Erklärung: Es gibt eine Zeichenspalte, aus der ich nur die Zeilen auswählen möchte, in denen der Text in der Spalte mit "d" oder "I" beginnt. Ich fand es notwendig, eine neue Spalte zu erstellen, für die der Datenfilter durchgeführt werden soll. Wenn ich den Code insgesamt ausführe, werden die Zeilen NICHT ausgewählt und die untergeordnete Datentabelle wird nicht erstellt. Wenn ich den Code zuerst BIS zur Erstellung der neuen Spalte Onelettet ausführe und DANN den Datenfilter ausführe, wird der Filter erstellt und die Zeilen ausgewählt. Und schließlich wird die Subset-Datentabelle erstellt. Aber diese Dinge sollten so oder so passieren, wie das Skript ausgeführt wird? ODER?
Dies ist grundlegend für die Verwendung von Skripten, daher muss ich mir ein tiefes Verständnis dieser Feinheiten aneignen.
Grüße
Poul
Betreff: Mehr zur Subset-ErstellungUnter Verwendung des Beispielcodes von MS ist hier eine direkte Lösung, die sehr robust ist, da es nicht erforderlich ist, dass die Zeilen in der Datentabelle in den ausgewählten Zustand wechseln:
dt = Neue Tabelle ( "Prüfung" ,
Zeilen hinzufügen ( 5 ) ,
Neue Spalte ( "Instr" , Charakter ,
Werte einstellen ( { "Trommel" , "Trompete" , "Leier" , "Klarinette" , "didgeridoo" } )
)
) ;
sel = dt << Holen Sie sich Zeilen wo ( Beginnt mit ( : Instr , "d" ) | Beginnt mit ( : Instr , "ich" ) ) ;
dt << Teilmenge ( Name der Ausgabetabelle ( "sel instr" ) , Reihen ( sel ) , ausgewählte Spalten ( 0 ) ) ;
Betreff: Mehr zur Subset-ErstellungDas Schließen des Datenfilters ist einfach, wenn Sie ihm eine Referenz gegeben haben.
df = dt << Datenfilter ( ... ) ;
df << nahe ;
Betreff: Mehr zur Subset-ErstellungHallo MS,
Hinzufügen von warten (); nachdem die Formelauswertung das Problem löst, dass der Filter nicht gesetzt wird, bevor der Subset-Befehl ausgeführt wird. Danke schön.
Wie lautet der Befehl zum Schließen des Filterfensters? Ich möchte nicht, dass es nach dem Subset auf dem Bildschirm bleibt. Ich will nur den Datensatz. Eigentlich brauche ich es gar nicht zu sehen.
Und ja, ich dachte, die Auswahl könnte in einer Aussage erfolgen. Wusste nur nicht wie es geht.
Danke schön
Poul
Betreff: Mehr zur Subset-ErstellungOhne eine Tabelle zum Testen des Codes ist schwer zu sagen, warum es in einem bestimmten Fall nicht funktioniert. Wenn Code von Spaltenformeln abhängt, die im selben Skript erstellt wurden, habe ich die Erfahrung gemacht, dass die Formelauswertung hinter der Skriptausführung zurückbleiben kann, was zu unerwarteten Ergebnissen führen kann. Um dies zu vermeiden kann man versuchen einzufügen Warte ab() oder << Bewertungsformel bei den kritischen Schritten.
In diesem speziellen Fall ist jedoch, wenn ich es richtig verstehe, keine neue Spalte (oder ein Datenfilter) erforderlich. Vielleicht hilft das folgende Beispiel weiter.
//Beispieltabelle
dt = Neue Tabelle ( "Prüfung" ,
Zeilen hinzufügen ( 5 ) ,
Neue Spalte ( "Instr" , Charakter ,
Werte einstellen ( { "Trommel" , "Trompete" , "Leier" , "Klarinette" , "didgeridoo" } )
)
) ;
// Instr beginnend mit d oder l unter Verwendung eines Datenfilters auswählen
sel = dt << Holen Sie sich Zeilen wo ( Beginnt mit ( : Instr , "d" ) | Beginnt mit ( : Instr , "ich" ) ) ;
dt << Datenfilter (
Filter hinzufügen ( Säulen ( : Instr ) , wo ( : Instr = : Instr [ sel ] ) , Modus ( wählen ( 1 ) ) )
) ;
dt << Teilmenge ( Name der Ausgabetabelle ( "sel instr" ) , Ausgewählte Zeilen ( 1 ) , ausgewählte Spalten ( 0 ) ) ;
// Oder ein direkterer Ansatz ohne Datenfilter
dt << wählen wo ( Beginnt mit ( : Instr , "d" ) | Beginnt mit ( : Instr , "ich" ) ) ;
dt << Teilmenge ( Name der Ausgabetabelle ( "sel instr" ) , Ausgewählte Zeilen ( 1 ) , ausgewählte Spalten ( 0 ) ) ;