Selezione di celle con dati vuotiHo una tabella che assomiglia alla tabella seguente:
| operatore |
Tipo M |
descrizione |
descrizione 2 |
M1 |
M2 |
M3 |
M4 |
M5 |
M6 |
| 415 |
Nxyz |
Un caldo |
Pulito a caldo 1 |
415 |
415 |
415 |
415 |
415 |
415 |
| 615 |
Nxyz |
B freddo |
Pulizia a freddo 1 |
615 |
615 |
615 |
|
615 |
615 |
| 815 |
Nxyz |
Un caldo |
Pulito a caldo 2 |
815 |
815 |
815 |
815 |
815 |
815 |
| 1015 |
Nxyz |
B freddo |
Pulizia a freddo 2 |
1015 |
|
1015 |
1015 |
1015 |
1015 |
| 1215 |
Nxyz |
Un caldo |
Pulito a caldo 1 |
1215 |
1215 |
1215 |
1215 |
1215 |
1215 |
| 1415 |
Nxyz |
B freddo |
Pulizia a freddo 1 |
1415 |
1415 |
1415 |
1415 |
1415 |
|
| 1615 |
Nxyz |
Un caldo |
Pulito a caldo 2 |
1615 |
1615 |
1615 |
1615 |
1615 |
1615 |
| 1815 |
Nxyz |
B freddo |
Pulizia a freddo 2 |
1815 |
1815 |
1815 |
|
|
1815 |
Voglio selezionare solo le righe vuote. Poiché le colonne M1-M6 possono variare ogni volta che estraggo i dati, non posso utilizzare i nomi delle colonne nello script JSL. Sto provando a utilizzare un ciclo FOR di seguito per selezionare le righe di dati vuoti, ma questo seleziona solo le righe in cui l'ultima cella è vuota.
dt = Current Data Table();
nc = dt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
dt <<SELECT where=""></SELECT>
Alla fine voglio che la tabella di output assomigli alla seguente
| operatore |
Tipo M |
descrizione |
descrizione 2 |
Macchina |
| 615 |
Nxyz |
B freddo |
Pulizia a freddo 1 |
M4 |
| 1015 |
Nxyz |
B freddo |
Pulizia a freddo 2 |
M2 |
| 1415 |
Nxyz |
B freddo |
Pulizia a freddo 1 |
M6 |
| 1815 |
Nxyz |
B freddo |
Pulizia a freddo 2 |
M4 |
| 1815 |
Nxyz |
B freddo |
Pulizia a freddo 2 |
M5 |
Il grande trucco è farlo senza codificare i nomi delle colonne per (M1, M2 ecc...) poiché cambieranno.
Qualche idea
Automazione e scriptingRi: Selezione di celle con dati vuoti<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Grazie a tutti.....Tutto ha funzionato tranne Loc Nonmissing.....Al momento ho solo JMP9 (troppo pigro per aggiornarlo) e quella funzione non funziona in JMP9......Sono ancora un principiante di JSL.....Grazie ancora
Ri: Selezione di celle con dati vuotiMS è ancora più intelligente: ora vediamo come lo fai in 0 righe di codice!Ah ah dimostra semplicemente che ci sono diversi modi per fare la stessa cosa in JSL.
Ri: Selezione di celle con dati vuotiSe ho letto correttamente il tuo messaggio, penso che tu abbia in realtà due domande.
- Come trovare le righe tutte mancanti per un determinato insieme di colonne.
- Come rendere il tuo codice non dipendente dai nomi di quelle colonne e da quante ce ne sono.
Non sorprende che ci siano molti modi diversi per farlo 1. PMroz , SM E Craige@JMP ti ho dato alcune opzioni lì.
Ne aggiungerò un altro. Potresti usare il Modello dati mancante utilità per trovarli.
dt = Open( "$SAMPLE_DATA\Cities.jmp" );
//delete some columns from this table to make it fit your example
dt << delete columns( "PM10", "X", "Y" );
//change name of data table to ensure this modified version doesn't get saved
//over the sample data
dt << set name( "CitiesModified" );
//I want to use the columns starting at column 9,
//so I build a list of references to them
mycols = {};
For( i = 9, i <= N Cols( dt ), i++,
Insert Into( mycols, Column( dt, i ) )
);
mdp = Dt << Missing Data Pattern( columns( Eval( mycols ) ), Output Table( "Missing Data Pattern" ) );
//The patterns columns shows the pattern of missing values
//the Missing Data Pattern data table is sorted,
//so if there are rows with all missing data
//the last row of the Missing Data Pattern data table will be all 1s.
//The Repeat() function just builds a string of 1s for as many columns as I'm working with
If( Column( mdp, "Patterns" )[N Rows( mdp )] == Repeat( "1", N Items( mycols ) ),
//The Missing Data Pattern data table is linked to the source table so selecting a row
//in it, selects all the rows that it represents in the source table
mdp << Select Rows( N Rows( mdp ) );
//now I can delete the rows in the source table
dt << delete rows;
,
Show( "No all missing rows" )
);
Ho provato a mostrare come far funzionare questo codice per qualsiasi numero di colonne. In questo caso, poiché avevo bisogno di un elenco di colonne da passare all'utilità Missing Data Pattern, ho creato un elenco basato sui numeri di colonna.
Anche dopo aver scritto tutto questo e aver mostrato come utilizzare l'utilità Missing Data Pattern, penso che la mia soluzione preferita qui sarebbe PMroz è da usare Impilare colonne . Vuoi davvero finire con i dati impilati comunque, quindi farlo prima rende facile selezionare semplicemente le righe mancanti nella colonna impilata ed eliminarle.
dt = Open( "$SAMPLE_DATA\Cities.jmp" );
//delete some columns from this table to make it fit your example
dt << delete columns( "PM10", "X", "Y" );
//change name of data table to ensure this modified version doesn't get saved
//over the sample data
dt << set name( "CitiesModified" );
//again I need a list of columns to use in the Stack()
mycols = {};
For( i = 9, i <= N Cols( dt ), i++,
Insert Into( mycols, Column( dt, i ) )
);
//stack those columns creating a new data table
stacked_dt = dt << Stack(
columns( Eval( mycols ) ),
Source Label Column( "Gas" ),
Stacked Data Column( "PPM" )
);
missing_rows = stacked_dt << get rows where( Is Missing( :PPM ) );
stacked_dt << delete rows( missing_rows );
Ri: Selezione di celle con dati vuotiAncora un altro modo per selezionare righe con celle vuote:
dt << select where(!Contains(Loc Nonmissing(dt << get as matrix), Row()));
Ri: Selezione di celle con dati vuotiMolto liscio.Non sapevo che potevi inserire in un'espressione (e).ho pensato inserire serviva un elenco.
Ri: Selezione di celle con dati vuotiStessa risposta di PMroz utilizzando la manipolazione delle espressioni:
dt = Current Data Table();
e = Expr( Or() ); // the OR of the ismissing(columns) will be built here
nc = dt << get column names( Numeric );
For( i = 1, i <= N Items( nc ), i++,
Insert Into( e, Eval Expr( Is Missing( Expr( nc ) ) ) )
);
dt << selectwhere( e );
assomiglia all'espressione "e".
nameexpr(e)
/*:
Is Missing( :m1 ) | Is Missing( :m2 ) | Is Missing( :m3 ) | Is Missing( :m4 ) | Is Missing( :m5 ) | Is Missing( :m6 )
Formula ricorsiva Head Arg
Introspezione

Ri: Selezione di celle con dati vuotiPuoi utilizzare il comando STACK per impilare i tuoi dati, inclusi i valori di M1-Mn .Quindi seleziona le righe vuote ed eliminale.
Oppure prova questo codice:
dt = Current Data Table();
col_list = dt << get column names( Numeric, string );
where_clause = "";
For( i = 1, i <= N Items( nc ), i++,
one_col = col_list[i];
if (i == 1,
// then
where_clause =evalinsert("\[dt << select where(is missing(as column(dt, "^one_col^"))]\");
// else
,
where_clause = evalinsert("\[^where_clause^ | is missing(as column(dt, "^one_col^"))]\");
);
);
where_clause = where_clause || ")";
eval(parse(where_clause));