Dichiarazioni condizionali, azioni e colonne di eliminazione<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Sto riscontrando un problema con uno script JSL e ho cercato una risposta nella documentazione, nei libri e nei forum degli utenti.
Ho scritto uno script che conteneva un'istruzione condizionale in JSL e uno dei "risultati" è eseguire un'azione come eliminare una riga.Questo può essere fatto in una dichiarazione condizionale?
Usiamo questo codice di esempio:
NE3=3;
NE4=5;
/* Queste variabili possono assumere valori diversi. */
Se (NE3==NE4,
NuovoNum = NE3,
NuovoNum = indice (NE3, NE4)
);
Se (NuovoNum == 0,
Stampa ("Nessuna eliminazione"),
Tabella dati corrente () << elimina colonna (NewNum)
);
Come puoi vedere o intuire, non riesco a eliminare le colonne.Ancora più importante, ho usato la prima istruzione condizionale perché volevo che creasse un intervallo o un valore singolo.
Tuttavia, non sono sicuro di cosa fare con 0 come valore, poiché JMP non può eliminare qualcosa che non esiste (ovvero colonna 0).Qualsiasi suggerimento sarà molto apprezzato!
Grazie molto,
K
Re: Dichiarazioni condizionali, azione ed eliminazione di colonneIndex() fornisce un vettore colonna, da cui le doppie parentesi. Prova a trasporre la matrice.
Elenco_DC1 = Come elenco ( trasporre ( Indice ( DC1 , DC2 ))) ;
DC_Lista2 = Come elenco ( trasporre ( Indice ( DC3 , DC4 ))) ;
Re: Dichiarazioni condizionali, azione ed eliminazione di colonneHo lavorato di più con le istruzioni condizionali e ho eliminato le colonne.Ci ho giocato ancora un po' e vedo cosa intendi per eliminare le colonne prendendo un nome o un indice di colonna singolo o un elenco di nomi o indici di colonna.Tuttavia, dopo aver eseguito il codice specificato e aver isolato l'azione di eliminazione della colonna e aver creato un elenco di indici, non sono ancora in grado di eliminare un intervallo completo di indici per le colonne.Per esempio:
Diciamo che il dt ha 13 colonne e voglio eliminare le prime tre (1-3) e le ultime due (12-13).
DC1 = 1 ;
DC2 = 3 ;
DC3 = 12 ;
DC4 = 13 ;
Elenco_DC1 = Come elenco ( Indice ( DC1 , DC2 )) ;
DC_Lista2 = Come elenco ( Indice ( DC3 , DC4 )) ;
Elenco_DC3 = Elenco_DC1 || DC_Lista2 ;
Tabella dati corrente () << eliminare le colonne ( dc_list3 ) ; /* Elimina solo la prima colonna b/c che è il valore della prima variabile. */
/* Per eliminare anche solo uno degli elenchi creati, non riesce ancora. */
tabella dati corrente () << eliminare le colonne ( dc_list1 ) ; /* Elimina solo la prima colonna b/c che è il valore della prima variabile. */
Mostrare ( dc_list1 ) ; /*dc_list1 = {{1, 2, 3}}; */
Mostrare ( dc_list3 ) ; /* dc_list3 = {{1, 2, 3}, {12, 13}}; */
So che la funzione "As List" converte la matrice in un elenco, ma non capisco perché gli dia doppie parentesi graffe.Penso che questo sia ciò che sta eliminando il mio codice per questo.Ho provato numerose combinazioni inutilmente.Qualche idea/suggerimento/aiuto?Molte grazie in anticipo per il vostro aiuto!
Re: Dichiarazioni condizionali, azione ed eliminazione di colonneNessuna critica a tutti!L'ho chiesto.Vedo questo come un aiuto per me (e la comunità JMP) con suggerimenti e lavoro attraverso i dettagli più fini.Ho imparato molto e apprezzo che tu abbia dedicato del tempo a rispondere alle mie domande e ad insegnarmi quei punti importanti e più fini.
Re: Dichiarazioni condizionali, azione ed eliminazione di colonneÈ possibile eseguire un'istruzione o 1000 in un'istruzione condizionale.Puoi eseguire istruzioni utilizzabili in un'istruzione condizionale, come mostrato dal mio codice.
La tua sintassi non era corretta in alcuni modi.
Se (NE3==NE4,
NuovoNum = NE3,
NuovoNum = indice (NE3, NE4)
);
Il risultato di questa istruzione IF è che newnum è un numero o una matrice.Questo va bene, ma forse un po' di confusione, poiché newnum viene utilizzato per due diversi tipi di valori (numero e matrice).Ma ciò causerà problemi con la successiva istruzione IF, come mostrato di seguito.
Se (NuovoNum == 0,
Stampa ("Nessuna eliminazione"),
Tabella dati corrente () << elimina colonna (NewNum)
);
È proprio qui che sta il problema.Newnum sarà 0 solo se NE3 e NE4 sono 0. Se ottieni una matrice dall'istruzione IF precedente (quando NE3 non è uguale a NE4), il confronto di NewNum con 0 non ha senso.Infine, l'istruzione della colonna di eliminazione funzionerà solo se newnum è un numero intero o un elenco.Quindi l'istruzione AS LIST è essenziale.
Spero che questo aiuti - questa è intesa come critica costruttiva.
Ho avuto molte difficoltà quando ho imparato JSL per la prima volta, specialmente con l'istruzione IF!Ho sviluppato uno stile che include commenti che mostrano dove si trovano le parti THEN e ELSE della dichiarazione.Per esempio:
Se ( scelta_tempo == 1 ,
// poi
data_clausola = "Attuale" ;
lista_caso = { 1 , 2 , 3 , 4 } ;
// altro
,
data_clausola = "Cumulativo" ;
lista_caso = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ;
) ;
Re: Dichiarazioni condizionali, azione ed eliminazione di colonneGrazie per l'aiuto!Lo apprezzo davvero.Una domanda che è fondamentale per l'istruzione condizionale: puoi eseguire azioni (ovvero eliminare e/o aggiungere colonne, righe, dt) in un'istruzione condizionale?Non capisco perché il codice non ha eliminato le colonne specificate.Era solo perché mi mancava la funzione as list dalla mia istruzione di esempio? O la mia sintassi era disattivata?Sto ancora imparando tutti i dettagli dei condizionali in JSL e vedo che hai usato i punti e virgola per "incollare" alcune espressioni insieme.Grazie ancora!
Re: Dichiarazioni condizionali, azione ed eliminazione di colonneQuesto è un po' complicato.Elimina colonne accetta un singolo nome di colonna o indice oppure a elenco di nomi di colonne o indici.Questo programma farà il trucco.Notare la COME ELENCO funzione che converte una matrice in una lista:
NE3 = 3 ;
NE4 = 5 ;
/* Queste variabili possono assumere valori diversi. */
dt = tabella dati corrente () ;
nc = coli ( dt ) ;
Se ( ne3 > 0 & ne3 <= nc & ne4 > 0 & ne4 <= nc ,
Se ( NE3 == NE4 ,
dt << elimina colonna ( ne3 ) ;
,
nuova_lista = come elenco ( Indice ( NE3 , NE4 )) ;
dt << elimina colonna ( nuova_lista ) ;
) ;
) ;