Determinazione dell'esistenza di una colonna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho uno script JMP che crea una nuova colonna con una formula al suo interno. Sto cercando di scoprire come rilevare se la colonna esiste già in modo da poter saltare la creazione ed evitare di generare colonne aggiuntive. Sono sicuro che c'è, ma non lo trovo nella letteratura che ho.
Grazie.
Mike
Ri: determinare se esiste una colonnaEcco una versione della mia logica che non fa distinzione tra maiuscole e minuscole.
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
// Convert all column names to uppercase for case-insensitive search
for (i = 1, i <= nitems(col_name_list), i++,
col_name_list[i] = uppercase(col_name_list[i]);
);
new_column = "BMI";
// English BMI Formula BMI = ( Weight in Pounds / ( Height in inches^2 ) ) x 703
if (!contains(col_name_list, uppercase(new_column)),
dt <<NEW column=""></NEW>Ri: determinare se esiste una colonnaGrazie ms!
Solo il tuo esempio ha funzionato per me, perché l'altra soluzione fa distinzione tra maiuscole e minuscole. Ho dovuto usare il tuo, poiché non potevo essere sicuro che il caso dei miei caratteri di stringa fosse corretto.Ri: determinare se esiste una colonnaPMroz,
Vorrei iniziare confermando che il codice che hai scritto ha funzionato anche per me e la spiegazione che ho scritto non è coerente con il comportamento di JMP 9 o 10.
Dopo aver letto la tua risposta, ho anche provato diverse combinazioni di istruzioni contains e if con elenchi, stringhe e numeri in JMP 9 e 10. Sebbene i miei tentativi non siano stati esaustivi, tutti i miei risultati sono coerenti con i tuoi. Inizialmente, quando ho letto il tuo primo post, ho ricordato alcuni problemi che avevo eseguito anni prima in cui avevo adottato l'uso di contains()>0. Non riesco a ricreare lo scenario; tuttavia, ho trovato le seguenti informazioni nella guida agli script di JMP. Descrive in dettaglio l'utilizzo contiene con >0, che può essere appropriato per il loro esempio, ma non afferma esplicitamente che sia o non sia richiesto.
Pagina 136 della guida agli script di JMP versione 10:
"Per valutare se un elemento è in un elenco, utilizzare Loc() E Contiene() con >0 . Un valore restituito pari a zero
significa che l'elemento non è nell'elenco. Un valore restituito pari a 1 significa che l'elemento è presente nell'elenco almeno una volta."
...
"Scopri se il numero 5 esiste nel numLista:
NRiga(Loc(numLista, 5)) >0;
0
Contiene(numLista, 5) >0;
0"
Spero che questo ti aiuti.
Ri: determinare se esiste una colonnaCiao wiebepo,
Ho provato diverse combinazioni e la negazione di un numero intero positivo, non importa quanto grande, risulta in uno 0. Quindi il mio codice funzionerà (in JMP 9 e 10).Detto questo, apprezzo l'avviso: questo approccio potrebbe non funzionare in tutte le lingue.Certamente sopporta ulteriori test.
b = 2000000000000;
!b;
Il registro mostra:
0
Saluti,
PMroz
Ri: determinare se esiste una colonnaUtile anche sapere. Sono sempre felice di avere un altro strumento da aggiungere alla cassetta degli attrezzi.
Grazie.
Ri: determinare se esiste una colonnaÈ molto utile saperlo. Dovrò stare attento a quello.
Grazie
Ri: determinare se esiste una colonnaNon esiste una singola funzione di cui sono a conoscenza. Ma Manca() in combinazione con è scriptabile() può fare il trucco.
La colonna deve anche essere racchiusa da un'istruzione Try() per evitare che lo script si interrompa se la colonna non esiste.
dt = Open( "$sample_data\Big Class.jmp" );
new_column = "BMI";
If( Is Missing( Is Scriptable( Try( Column( new_column ) ) ) ),
dt << New Column( new_column, numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Ri: determinare se esiste una colonnaNon sono sicuro che questo sia vero in tutte le versioni recenti di JMP. Faccio questo commento solo per evidenziare un'opportunità per migliorare la robustezza del codice.
'Contains' restituisce la posizione dell'elemento, che va bene da usare in un'istruzione 'if', poiché zero sarà interpretato come falso e un valore positivo sarà interpretato come vero. Quando si fa precedere a contains da not '!', la condizione funziona quando l'elemento non è presente o quando è presente come primo elemento; tuttavia, quando l'elemento non è il primo ( un valore maggiore di 1 ), non '!' può fallire nel convertire la condizione in false. Ciò può essere evitato utilizzando un confronto '>0' con 'contiene'. Vedi sotto per la sintassi.
dt = Open( "$sample_data\Big Class.jmp" );
col_name_list = dt << get column names( string );
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
If( !(Contains( col_name_list, new_column ) > 0),
dt << New Column( "BMI", numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Ri: determinare se esiste una colonnaGrazie, a me funziona benissimo. Mi aspettavo di trovare una funzione per verificare l'esistenza, ma funziona.
Ri: determinare se esiste una colonna
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
if (!contains(col_name_list, new_column),
dt <<NEW column=""></NEW>