Come posso creare una tabella di sottoinsiemi condizionali senza chiamare direttamente il nome di una colonna?Le prime 3 righe di questo script creano una nuova tabella di dati in cui le altezze sono inferiori a 60. Questa parte funziona bene.
Per la funzione che vorrei sviluppare vorrei fare riferimento a una colonna in un modo diverso rispetto all'utilizzo di :height.
Ho provato 4 modi diversi per fare riferimento alla colonna, ma nessuno di questi funziona. Ho usato la funzione della colonna e ho ottenuto la funzione di riferimento della colonna (vedi sotto).
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This one works
dtSubgroup = dt << Subset(Rows(dt << get rows where(:height < 60)));
//None of these work
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(dt, "height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(4) < 60)));
refList = dt << Get Column Reference( {"height"} );
dtSubgroup = dt << Subset(Rows(dt << get rows where(refList[1] < 60)));C'è qualche motivo per cui non funzionano?
Qualche suggerimento su una soluzione?
Grazie per l'aiuto.
Ri: Come posso creare una tabella di sottoinsiemi condizionali senza chiamare direttamente il nome di una colonna?Sembra strano, vero?
È tutta una questione di contesto. Ad esempio, potresti usarlo in una formula di colonna:
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
Oppure potresti usarlo nella funzione For Each Row() per ottenere la stessa cosa in uno script:
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
Il contesto della formula della colonna e dell'iterazione sopra è tale che JMP sta impostando implicitamente la funzione Row() per te. Quindi JMP utilizza tali informazioni per capire dove ottenere o memorizzare il valore (ad esempio, quale riga). Questo non è il contesto del caso generale qui:
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
La tabella di dati non utilizza in modo implicito il numero di riga corrente quando si tenta di valutare il confronto. Puoi forzarlo aggiungendo l'operatore pedice vuoto, [ ].
Ri: Come posso creare una tabella di sottoinsiemi condizionali senza chiamare direttamente il nome di una colonna?Grazie, questo ha fatto esattamente quello che volevo.
Posso chiederti perché funziona?
Ho usato molte volte la funzione della colonna senza usare parentesi quadre.
Cosa c'è di diverso in questo caso? Qual è la regola da seguire?Ri: Come posso creare una tabella di sottoinsiemi condizionali senza chiamare direttamente il nome di una colonna?Prova ad aggiungere parentesi quadre vuote dopo la parentesi di chiusura della funzione Column(). Come questo:
Column("height")[] < 60
Questo cambiamento aiuta?