Ulteriori informazioni sulla creazione di sottoinsiemi<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao, mi riferisco al post https://communities.sas.com/message/166376#166376 da maggio di quest'anno.
L'esempio spiega come creare una nuova tabella di dati 1) aggiungendo prima un filtro di dati f e 2) quindi sottoimpostando:
dt = Aperto (BigClass);
dt << filtro dati (add filter(columns(:age),where(:age=={12,13}), Mode (select(1)));
sub1 = dt<
Come risultato viene creata una tabella di dati, denominata "regioni". Come previsto.
Ho creato un esempio simile utilizzando il mio set di dati (l'esempio BigClass funziona!!), che non funziona bene per me. Sospetto di aver frainteso qualcosa. Ecco il flusso del mio programma allegato.
La differenza tra l'esempio BigClass e il mio esempio è che il filtro dati non viene selezionato quando eseguo l'intero script. (Ho omesso il caricamento del file da un file Excel per poterti inviare il codice originale, che conteneva determinati nomi). Per spiegare: c'è una colonna di caratteri, da cui voglio selezionare solo quelle righe in cui il testo nella colonna inizia con "d" o "I". Ho ritenuto necessario creare una nuova colonna su cui eseguire il filtro dati. Quando eseguo il codice in totale, le righe NON vengono selezionate e la tabella dei dati con subset non viene creata. Se eseguo prima il codice FINO alla creazione della nuova colonna, Onelettet, e POI eseguo il filtro dati, il filtro viene creato e le righe vengono selezionate. E infine viene creata la tabella dei dati del sottoinsieme. Ma queste cose dovrebbero accadere in entrambi i casi, come viene eseguito lo script? O?
Questo è fondamentale per l'uso dello scripting, quindi ho bisogno di comprendere a fondo queste sottigliezze.
Saluti
Pol
Ri: Altro sulla creazione di sottoinsiemiUtilizzando il codice di esempio di MS, ecco una soluzione diretta molto robusta, poiché non richiede che le righe nella tabella dati passino allo stato selezionato:
dt = Nuova Tavola ( "test" ,
Aggiungi righe ( 5 ) ,
Nuova Colonna ( "Instr" , Carattere ,
Imposta valori ( { "tamburo" , "tromba" , "lira" , "clarinetto" , "didgeridoo" } )
)
) ;
sel = dt << ottenere righe dove ( Inizia con ( : instr , "d" ) | Inizia con ( : instr , "io" ) ) ;
dt << sottoinsieme ( nome della tabella di output ( "sel instr" ) , Righe ( sel ) , colonne selezionate ( 0 ) ) ;
Ri: Altro sulla creazione di sottoinsiemiLa chiusura del filtro dati è semplice se gli hai fornito un riferimento.
df = dt << filtro dati ( ... ) ;
df << chiudere ;
Ri: Altro sulla creazione di sottoinsiemiCiao MS,
aggiungendo wait(); dopo che la valutazione della formula risolve il problema del filtro che non viene impostato prima dell'esecuzione del comando subset. Grazie.
Qual è il comando per chiudere la finestra del filtro? Non voglio che rimanga sullo schermo dopo il sottoinsieme. Voglio solo il set di dati. In realtà non ho bisogno di vederlo affatto.
E sì, ho pensato che la selezione potesse essere fatta in una dichiarazione. Semplicemente non sapevo come farlo.
Grazie
Pol
Ri: Altro sulla creazione di sottoinsiemiÈ difficile dire perché non funziona in un caso particolare senza una tabella per testare il codice. Se il codice dipende dalle formule di colonna create nello stesso script, ho riscontrato che la valutazione della formula può rimanere indietro rispetto all'esecuzione dello script, il che può portare a risultati imprevisti. Per evitare questo si può provare a inserire Attesa() o << formula di valutazione nei passaggi critici.
Tuttavia in questo caso particolare, se ho capito bene, non è necessaria una nuova colonna (o un filtro dati). Forse l'esempio qui sotto può essere di aiuto.
//tabella di esempio
dt = Nuova Tavola ( "test" ,
Aggiungi righe ( 5 ) ,
Nuova Colonna ( "Instr" , Carattere ,
Imposta valori ( { "tamburo" , "tromba" , "lira" , "clarinetto" , "didgeridoo" } )
)
) ;
// Seleziona instr che inizia con d o l utilizzando un filtro dati
sel = dt << ottenere righe dove ( Inizia con ( : instr , "d" ) | Inizia con ( : instr , "io" ) ) ;
dt << filtro dati (
aggiungi filtro ( colonne ( : instr ) , dove ( : instr = : instr [ sel ] ) , modalità ( Selezionare ( 1 ) ) )
) ;
dt << sottoinsieme ( nome della tabella di output ( "sel instr" ) , Righe selezionate ( 1 ) , colonne selezionate ( 0 ) ) ;
// O un approccio più diretto senza filtro dati
dt << seleziona dove ( Inizia con ( : instr , "d" ) | Inizia con ( : instr , "io" ) ) ;
dt << sottoinsieme ( nome della tabella di output ( "sel instr" ) , Righe selezionate ( 1 ) , colonne selezionate ( 0 ) ) ;