¿Busca el número de columna?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Necesito el número de columna.Tengo el nombre de la columna, pero es posible que no siempre esté en el mismo espacio.
Primero decidí usar un bucle While que deja de iterar cuando se encuentra la columna."n" sería el número de columna, pero no funciona.
colEncontrado = 0 ;
norte = 0 ;
Mientras ( colEncontrado == 0 ,
norte ++;
colNombre = Nombre de columna ( norte ) ;
si ( colNombre == Enfermedad venérea , colEncontrado = 1 , ) ;
) ;
Recibo este error: argumento no válido en el acceso o evaluación de 'Nombre de columna', Nombre de columna/*###*/(n)
Sin embargo, si uso esto (esta vez sé el número real), devuelve el nombre de la columna que estoy buscando:
col = Nombre de columna (38);
mostrar(col);
De una publicación ( número de columna ), utilicé la sugerencia de msharp, pero todavía no tuve suerte para obtener el número de columna, ¿simplemente devuelve el nombre de la columna?
Re: ¿Buscas el número de columna?Gracias msharp, lo tendré en cuenta.¡Es mucho más limpio!
Re: ¿Buscas el número de columna?Como regla general.Yo diría que si su código o tabla está configurado de tal manera que depende del orden de las columnas, probablemente esté haciendo algo feo.Puede que funcione, pero probablemente exista una forma más elegante y rápida de hacerlo.
El orden de los datos realmente solo debe considerarse al final de un script cuando elige mostrar los datos (y en su mayor parte eso ni siquiera es necesario ya que generalmente es mejor mostrar los datos en un gráfico y no en una tabla).
Dicho esto, un código feo que funciona sigue siendo un buen código.En su caso, suponiendo que no tiene control sobre cómo se introducen las tablas de datos en su secuencia de comandos, esta puede ser la solución más sencilla.Sin embargo, aún puedes condensar el código de esta manera: (Observa que nunca necesito saber el número de columna).
colEncontrado = 0 ;
ncols = ncol ( dtResumen ) ;
para ( i = 1 , i <= ncols , i ++,
si ( colEncontrado ,
si ( dispositivoPass ,
dispositivoPass --;
Insertar en ( y_cols , i , i ) ;
,
romper ()
)
) ;
colNombre = ( Nombre de columna ( i ) << obtener nombre ) ;
si ( colNombre == "Enfermedad venérea" , colEncontrado = 1 ) ;
) ;
Re: ¿Buscas el número de columna?Si sé que siempre habrá una columna llamada "Vd" en mis datos pero podría estar en una ubicación diferente cada vez, ¿por qué no querría usar el número de columna?Después de la columna Vd, habrá "x" número de columnas que necesito insertar en una lista.Dado que el número de columnas se desconoce hasta que ejecute el script y los nombres de estas columnas se determinarán en función del resultado de mis datos, no veo por qué usar el número de columna es horrendo.Supongo que a medida que se crean esas columnas, podría insertarlas en una lista, pero explique por qué obtener el número de columna es horrendo.
colEncontrado = 0 ;
norte = 0 ;
ncols = ncol ( dtResumen ) ;
para ( i = 1 , i <= ncols , i ++,
colNombre = ( Nombre de columna ( i ) << obtener nombre ) ;
si ( colNombre == "Enfermedad venérea" , colEncontrado = 1 ; romper () , ) ;
) ;
iCol = 1 ;
//iCol = Contiene(dtSummary << obtener nombres de columnas, Columna("Vd"));
si ( colEncontrado == 1 ,
y_cols = {} ;
para ( norte = iCol + 1 , norte <= ( iCol + dispositivoPass ) , norte ++,
y_cols = Insertar ( y_cols , norte , norte ) ;
) ,);
Re: ¿Buscas el número de columna?Creo que no entendiste mi sugerencia.Mi sugerencia es que NO encuentre un número de columna.Es una mala práctica de codificación; de hecho, es horrenda.
Re: ¿Buscas el número de columna?¡Gracias, me alegro de que hayas publicado!Lo hice funcionar.Ahora entiendo un poco más de tus dos publicaciones.
Re: ¿Buscas el número de columna?Parece que Peter se me adelantó en responder, pero aquí hay otro método sin bucles, por lo que debería ser más rápido para una gran cantidad de columnas.
dt = Abierto ( "$sample_data\Analgésicos.jmp" );
número_columna = Contiene (dt << obtener nombres de columnas , Columna ( "droga" ));
Simplemente reemplace "fármaco" con el nombre de la columna que esté buscando para obtener el número de columna asociado.
Julian
Re: ¿Buscas el número de columna?¡Oh, gracias por captar eso!
Mi código funciona bien, gracias de nuevo.
Re: ¿Buscas el número de columna?Por alguna razón, el bucle while no funcionaba correctamente si no se encontraba el nombre de la columna.Esto es un poco más limpio:
dt = Abierto ( "$sample_data\Gran Clase.jmp" ) ;
Tabla de datos actuales ( dt ) ;
enfermedad venérea = "altura" ;
colEncontrado = 0 ;
norte = 0 ;
ncols = ncol ( dt ) ;
para ( i = 1 , i <= ncols , i ++,
colNombre = ( Nombre de columna ( i ) << obtener nombre ) ;
Si ( colNombre == Enfermedad venérea ,
colEncontrado = 1 ;
romper () ;
) ;
) ;
Re: ¿Buscas el número de columna?El nombre de la columna es engañoso: devuelve la columna, por ejemplo: altura, y no "altura".Además, nunca verifica si n va más allá del número de columnas de su tabla.Este código funcionará:
dt = Abierto ( "$sample_data\Gran Clase.jmp" ) ;
Tabla de datos actuales ( dt ) ;
enfermedad venérea = "altura" ;
colEncontrado = 0 ;
norte = 0 ;
ncols = ncol ( dt ) ;
Mientras ( ! colEncontrado & norte <= ncols ,
norte ++;
colNombre = ( Nombre de columna ( norte ) << obtener nombre ) ;
Si ( colNombre == Enfermedad venérea ,
colEncontrado = 1
) ;
) ;