Maggiori informazioni sulla creazione di sottoinsiemiCiao, mi riferisco al post https://communities.sas.com/message/166376#166376 di maggio di quest'anno.
L'esempio spiega come creare una nuova tabella dati 1) aggiungendo prima un filtro dati af e 2) quindi creando un sottoinsieme:
dt = Aperto (BigClass);
dt << filtro dati (aggiungi filtro(colonne(:età),where(:età=={12,13}), Modalità (seleziona(1)));
sub1 = dt<
Come risultato viene creata una tabella 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 di caricare il file da un file Excel per poterti inviare il codice originale, che conteneva determinati nomi). Per spiegare: esiste una colonna di caratteri, dalla quale 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 dei dati. Quando eseguo il codice in totale, le righe NON vengono selezionate e la tabella dei dati sottoinsiemi non viene creata. Se prima eseguo il codice FINO alla creazione della nuova colonna, Onelettet, e POI eseguo il filtro dei dati, il filtro viene creato e le righe vengono selezionate. Infine viene creata la tabella dei dati del sottoinsieme. Ma queste cose dovrebbero accadere in ogni caso, come viene eseguito lo script? O?
Questo è fondamentale per l'uso dello scripting, quindi ho bisogno di comprendere a fondo queste sottigliezze.
Saluti
Poul
Re: Ulteriori informazioni 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 tabella ( "test" ,
Aggiungi righe ( 5 ) ,
Nuova colonna ( "Istruz" , Carattere ,
Imposta valori ( { "tamburo" , "tromba" , "lira" , "clarinetto" , "didgeridoo" } )
)
);
sel = dt << ottieni righe dove ( Inizia con ( : instr , "d" ) | Inizia con ( : instr , "l" ) ) ;
dt << sottoinsieme ( nome della tabella di output ( "sel instr" ) , righe ( sel ) , colonne selezionate ( 0 ) ) ;
Re: Ulteriori informazioni sulla creazione di sottoinsiemiChiudere il filtro dati è semplice se gli hai fornito un riferimento.
df = dt << filtro dati ( ... ) ;
df << vicino ;
Re: Ulteriori informazioni 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 del sottoinsieme. 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ì, pensavo che la selezione potesse essere fatta in una sola dichiarazione. Semplicemente non sapevo come farlo.
Grazie
Poul
Re: Ulteriori informazioni sulla creazione di sottoinsiemiÈ difficile dire perché non funzioni in un caso particolare senza una tabella per testare il codice. Se il codice dipende da formule di colonna create nello stesso script, ho riscontrato che la valutazione della formula può ritardare rispetto all'esecuzione dello script, il che può portare a risultati imprevisti. Per evitare ciò si può provare a inserire Wait() o << formula eval nei passaggi critici.
Tuttavia in questo caso particolare, se ho capito bene, non è necessaria una nuova colonna (o un filtro dati). Forse l'esempio seguente può essere di aiuto.
//tabella di esempio
dt = Nuova tabella ( "test" ,
Aggiungi righe ( 5 ) ,
Nuova colonna ( "Istruz" , Carattere ,
Imposta valori ( { "tamburo" , "tromba" , "lira" , "clarinetto" , "didgeridoo" } )
)
);
// Seleziona l'istruzione che inizia con d o l utilizzando un filtro dati
sel = dt << ottieni righe dove ( Inizia con ( : instr , "d" ) | Inizia con ( : instr , "l" ) ) ;
dt << filtro dati (
aggiungi filtro ( colonne ( : instr ) , dove ( : instr = : instr [ sel ] ) , modalità ( seleziona ( 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 , "l" ) ) ;
dt << sottoinsieme ( nome della tabella di output ( "sel instr" ) , righe selezionate ( 1 ) , colonne selezionate ( 0 ) ) ;