Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Scenario: è necessario aggiungere i file di dati del sondaggio giornaliero (che includono tutti i giorni precedenti) a una tabella principale con solo record ID rispondenti non duplicati e senza creare una nuova tabella (perché non voglio perdere le righe selezionate nella tabella principale che sono nascosto o escluso
Due tentativi:
Concatenate mantiene la tabella principale ma riporta tutti i record
Join porta solo i nuovi record ma crea una nuova tabella in modo che le caratteristiche delle righe (hide, exlcude) vengano perse
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Eccellente!!!
Ciò che mi ha confuso è stata questa frase:
Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << ottiene i nomi delle colonne( string ), "\!"), :Name(\!"" ) || "\ !"))" );
Non riuscivo a capire cosa facesse "Row ()" nel primo argomento.
Grazie mille.
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Ciao Martino,
Hai ragione.Quelle linee fanno esattamente quello che hai dedotto.Ho aggiunto alcuni commenti per renderlo più chiaro agli altri.
Sono contento che lo trovi utile!
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Quindi penso di aver capito.La riga 1 ha prodotto una stringa "Col Min( Row(), :name, :age, :sex, :height, :weight )" che verrà utilizzata in (2) per determinare il numero di riga di una riga precedente in cui tutte le colonne corrispondono .E, 2 aggiungerà il numero di riga della riga duplicata a un array "duplicati".
Questo è abbastanza intelligente.Mi chiedo cosa succede quando ci sono tre copie.Manterrà sempre la prima istanza ed eliminerà la seconda e la terza?Dovrò provarlo.
Grazie robottino!
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Hello Robot, potresti spiegare cosa fanno queste due righe?
Grazie
1. col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << ottiene i nomi delle colonne( string ), "\!"), :Name(\!"" ) || "\!"))" );
2. Per ogni riga( If( col_min != Row(), duplicati |/= Row() ) );
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Ciao cdwhite,
Tempo fa ho scritto una sceneggiatura che potrebbe essere d'aiuto.Lo script seguente eliminerà le righe duplicate preservando la tabella di dati originale, incluse le formule e gli stati delle righe.L'utilizzo della funzione Concatena seguita da questo script potrebbe risolvere il tuo problema.
Nomi Predefinito A Qui( 1 );
// Crea tabella dati e nuovi dati.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Seleziona a caso( 10 );
dt2 = dt << Subset( (Righe selezionate), Output Table Name( "New Data" ) );
dt << Cancella Seleziona;
dt2 << Aggiungi righe( {:nome = "PETER", :età = 14, :sesso = "M", :altezza = 61, :peso = 124} );
// Imposta casualmente gli stati delle righe nei dati originali.
dt << Seleziona a caso ( 10 ) << Nascondi << Escludi << Cancella Seleziona;
// Aggiungi nuovi dati.
dt << Concatena( dt2, Aggiungi alla prima tabella );
Chiudi( dt2, Nessun salvataggio );
// Elimina le righe duplicate.
dt = Tabella dati corrente();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( dt << ottiene i nomi delle colonne( string ), "\!"), :Name(\!"" ) || "\!"))" ); // Crea un'espressione JSL per determinare il numero minimo di riga in base a tutte le altre colonne.
duplicati = []; // Crea una matrice per memorizzare le righe duplicate.
Per ogni riga( If( col_min != Row(), duplicati |/= Row() ) ); // Confronta ogni riga con l'espressione "col_min" sopra.Se la riga corrente non corrisponde alla riga minima di tutte le altre colonne, quella riga verrà aggiunta alla matrice "duplicati".
dt << elimina le righe ( duplicati ); // Elimina i duplicati.
nn = N righe ( duplicati );
Nuova finestra( "Elimina righe duplicate", <Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?
Ho provato a utilizzare l'opzione di aggiornamento della tabella principale, ma crea comunque una nuova tabella.
Tabella dati ( "Originale" ) << Giuntura (
Con ( Tabella dati ( "Nuovi dati" ) ) ,
Aggiornamento ,
Per colonne corrispondenti ( : ID colonna = : ID colonna ) ,
Rilascia multipli ( 1 , 1 ) ,
Nome ( "Includi non corrispondenze" )( 0 , 1 ) ,
Mantieni l'ordine del tavolo principale ( 1 )
);

Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Quando si esegue un join è possibile evitare di creare una nuova tabella utilizzando l'opzione "aggiorna la tabella principale con i dati della seconda tabella".
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Grazie.Aggiunta una nuova colonna designata come tipo di dati dello stato della riga alla tabella dati originale e quindi utilizzata la funzione di copia da e verso nel menu degli stati della riga (facendo clic sulla colonna dello stato della riga nella casella di riepilogo della colonna a sinistra, non sull'intestazione della colonna effettiva) per copiare sopra e quindi riapplicare gli stati di riga dopo l'unione.Lo script per la riga accoda unisci per portare solo i nuovi record da un set di dati del sondaggio (e ignorare tutti i casi aggiunti in precedenza) nella tabella di dati principale:
Data Table( "Principale set di dati del sondaggio" ) << Join(
With( Data Table( "Secondary survey data set" ) ),
Unisci colonne con lo stesso nome,
Copia la formula della seconda tabella ( 0 ),
Elimina la valutazione della formula della tabella principale ( 0 ),
Corrispondendo alle colonne ( :ResponseID = :ResponseID ),
Rilascia multipli ( 0, 0 ),
Nome( "Includi non corrispondenze" )(0, 1),
Conserva l'ordine della tabella principale( 1 )
)
Dopo aver unito i due file, copiare/ripristinare gli stati della riga dalla colonna dello stato della riga utilizzando il menu dello stato della riga.Ha funzionato perfettamente.Grazie!
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?È possibile eseguire operazioni sugli insiemi utilizzando array associativi.Impossibile trovare un modo intelligente per aggiungere una tabella a un'altra.Ho dovuto analizzare i dati utilizzando i loop JSL.
dt_originale = Nuova Tavola ( "Originale" , Aggiungi righe ( 4 ) ,
Nuova Colonna ( "ID colonna" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori ( [ 1 , 2 , 3 , 4 ] )
) ,
Nuova Colonna ( "Risultato" , Carattere , Nominale , Imposta valori ( { "UN" , "B" , "C" , "D" } ) )
) ;
dt_new = Nuova Tavola ( "Nuovi dati" , Aggiungi righe ( 10 ) ,
Nuova Colonna ( "ID colonna" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] )
) ,
Nuova Colonna ( "Risultato" , Carattere , Nominale ,
Imposta valori ( { "UN" , "B" , "C" , "D" , "e" , "F" , "G" , "H" , "io" , "J" } )
)
) ;
// Determina quali righe sono nella nuova tabella che non sono in quella vecchia
a_original = matrice associativa ( colonna ( dt_originale , "ID colonna" )) ;
un nuovo = matrice associativa ( colonna ( dt_new , "ID colonna" )) ;
un nuovo << rimuovere ( a_originale ) ;
nuove_righe = un nuovo << prendi le chiavi ;
// Ci deve essere un modo più veloce per aggiungere una tabella all'altra sul posto
ni = nrow ( dt_original ) ;
nr = articoli ( nuove_righe ) ;
dt_original << aggiungere righe ( nr ) ;
per ( io = 1 , io <= ncols ( dt_original ) , io ++,
una_col = colonna ( dt_original , io ) << ottenere nome ;
per ( K = 1 , K <= articoli ( nuove_righe ) , K ++,
M = nuove_righe [ K ] ;
N = K + ni ;
colonna ( dt_originale , una_col )[ N ] = colonna ( dt_new , una_col )[ M ] ;
) ;
) ;
Ri: Aggiunta di righe non duplicate (ID colonna singola) a una tabella principale senza creare una nuova tabella?Trovo che unire e concatenare tabelle sia un po' un'arte (cioè, tentativi ed errori finché non ottengo ciò che voglio veramente).Tuttavia, ti consiglio di cercare il tipo di colonna "stati di riga" in quanto puoi salvare tutti i tuoi stati di riga correnti (ovvero gli stati di riga nascosti ed esclusi) in una colonna che puoi riapplicare secondo necessità alla tua tabella.