Ciao,
Ho trovato una discussione del 2015 (oggetto "sumif") che contiene uno script molto utile per il mio compito attuale. Ho scritto lì la mia domanda ma non so se le persone che hanno partecipato a quella discussione possono vedere la mia domanda.
Questo script l'ho trovato (leggermente modificato) e funziona benissimo per contare le colonne per ogni riga in cui i valori sono "0/0" (o qualsiasi altra cosa).
dt << New Column("Sum",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Column(i)[] =="0/0")}, n))
)
)
);Tuttavia, come modificare questo script per contare le colonne che contengono "some_character"?
Ho allegato una tabella dati in cui l'ultima colonna "Somma" contiene una formula e i numeri risultanti necessari.
Ho una tabella di big data e vorrei avere uno script per contare le colonne per ogni riga con valori specifici (come carattere).
Ho provato a modificare lo script sopra ma non funziona:
dt << New Column("Miss",
Numeric, Formula(
Local({i = 0, n = N Col(Current Data Table()) - 1},
Sum(Repeat({i++ ; (Contains(Column(i)[],"."))}, n))
)
)
);</CODE>Please, help</P><P>Valentina</P></LINGO-BODY><LINGO-LABS id="lingo-labs-737490" slang="en-US" mode="CREATE"><LINGO-LABEL>Automazione e scripting</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-737514" slang="en-US" mode="CREATE">Re: sumif: conta le colonne se contengono qualche carattere</LINGO-SUB><LINGO-BODY id="lingo-body-737514" slang="en-US" mode="CREATE"><P>È necessario avere una formula per questo?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737576" slang="en-US" mode="CREATE">Re: sumif: conta le colonne se contengono qualche carattere</LINGO-SUB><LINGO-BODY id="lingo-body-737576" slang="en-US" mode="CREATE"><P>Scusa, non capisco la tua domanda.</P><P>Ho una tabella di circa 500.000 righe e circa 3.000 colonne. Devo calcolare la somma tra le colonne che contengono un punto: non posso usare la formula. .</P><P>Voglio avere una sceneggiatura, qualsiasi sceneggiatura che funzioni. Ho provato diversi approcci ma nessuno ha funzionato. .</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737577" slang="en-US" mode="CREATE">Re: sumif: conta le colonne se contengono qualche carattere</LINGO-SUB><LINGO-BODY id="lingo-body-737577" slang="en-US" mode="CREATE"><P>Questo è dal mio registro:</P><P> </P><P>Formula di somma delle colonne interrotta<BR /> l'argomento è di tipo errato alla riga 421001 nell'accesso o nella valutazione di 'Contiene' , Argomento errato( Colonna( i )[] ), Contiene/*###*/(Colonna( i )[], ".")<BR /> Gli errori di valutazione della formula sono stati ignorati</P></LINGO-BODY><LINGO-SUB id="lingo-sub-737582" slang="en-US" mode="CREATE">Re: sumif: conta le colonne se contengono qualche carattere</LINGO-SUB><LINGO-BODY id="lingo-body-737582" slang="en-US" mode="CREATE"><P>Molto probabilmente il tuo ciclo sta raggiungendo una colonna che non è una colonna di caratteri. Questa parte molto probabilmente necessita di qualche modifica</P>
<PRE><CODE class=" language-jsl">n = N Col(Current Data Table()) - 1
come dovrebbe essere fatto è molto difficile da sapere senza alcuna conoscenza dei tuoi dati. Potrebbe essere solo una semplice modifica a -1, ottenere un elenco di colonne di caratteri o calcolare quali colonne esaminare secondo una sorta di schema
Ho allegato una piccola tabella dati al mio post. Ha 3 righe e 3 colonne con un'intestazione:
S1 S2 S3
0/0./. 0/0
./. ./. ./.
0/0 0/0 0/0
Lo script non funziona in questa tabella di esempio
Formula somma colonne Interrotta
l'argomento è di tipo errato alla riga 1 nell'accesso o nella valutazione di 'Contiene' , Argomento errato( Colonna( i )[] ), Contiene/*###*/(Colonna( i )[], ".")
Gli errori di valutazione della formula sono stati ignorati
La tabella dati originale che hai allegato non era così poiché ha 4 colonne (non puoi ignorare la colonna Somma)

A seconda dei tuoi dati, ecco come lo farei se dovessi utilizzare una formula (molto probabilmente lo eviterei e utilizzerei semplicemente una soluzione di script puro)
Names Default To Here(1);
dt = Open("$DOWNLOADS/sum_help_data.jmp");
dt << Delete Column("Sum");
dt << New Column("Miss", Numeric, Continuous, Formula(
As Constant(
cols_of_interest = Filter Each({colname}, Current Data Table() << Get Column Names("String"),
!IsMissing(Regex(colname, "S\d"));
);
);
Local({
res = 0;
},
For Each({colname}, cols_of_interest,
res = res + (Contains(Column(colname)[], ".") > 0);
);
res;
);
));
Sì, sembra che tutti i dati dovrebbero essere dello stesso tipo.
Grazie: funziona!