FoxPro/Visual FoxPro - Recorrer filas de una tabla con For y obtener Pareto

   
Vista:
Imágen de perfil de nancy

Recorrer filas de una tabla con For y obtener Pareto

Publicado por nancy nanshh.nanchy@gmail.com (7 intervenciones) el 05/12/2017 03:19:09
Hola buen día, si son tan amables de ayudarme con el siguiente problema.

Tengo una tabla que se llama datos_matricula, algunas de las columnas que la componen son la matricula es mi llave primaria, el estatus mensual, y pareto (columna a actualizar en base a las columnas del estatus). El pareto es la regla del 80-20; osea en las columnas veré la letra que se repite más y eso sera mi pareto. Ejemplo:

Matricula | Est1 | Est2 | Est3 | Est4 | Est5 | Est6 | Est7 | Est8 | Est9 | Pareto
Ped123 | A | B | C | D | A | A | B | A | C | A
Ped456 | B | B | A | A | B | D | A | B | C | B
Ped789 | D | A | B | C | D | D | B | A | C | D

La idea que tengo es que con un ciclo For vaya recorriendo cada columna de estatus que tenga mi matricula y así obtener la letra que se repite mas veces por fila. Aunque hasta el momento el código que tengo no me sale nada y también no tengo una idea clara de como hacerlo.

Les agradecería mucho si me ayudan a orientarme. Saluditos :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Abel

Recorrer filas de una tabla con For y obtener Pareto

Publicado por Abel (146 intervenciones) el 05/12/2017 17:28:26
Puedes hacerlo así.. He usado los nombres que indicaste como nombre de campos ya sea ESTn y PARETO.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Use <TuTabla>
Scan
	Dimension aDistrib(4,2)
	For nX=1 To 4
		aDistrib(nX,1) = Chr(64+nX)
		aDistrib(nX,2) = 0
	Next
 
	For nY=1 To Afields(aCampos)
		If Upper(Left(aCampos(nY,1),3))="EST"
			cCampo = &aCampos(nY,1)
			nPosit = Asubscript(aDistrib,Ascan(aDistrib,cCampo),1)
			aDistrib(nPosit,2) = aDistrib(nPosit,2)+1
		Endif
	Next
	Asort(aDistrib,2,-1,1)
	Replace Pareto With aDistrib(1,1)
Endscan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de nancy

Recorrer filas de una tabla con For y obtener Pareto

Publicado por nancy (7 intervenciones) el 05/12/2017 22:32:47
Hola, gracias por haberte tomado el tiempo en ayudarme, pero te comento que en lo que me ayuda tu código es en actualizar la columna Pareto con la información del campo de la primera fila y la columna Est1 y por eso inserta la letra A, pero a todos los registros. El pareto es lo que mas se repite en una información. Adjunto un ejemplo a detalle de lo que deseo realizar.


Gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel

Recorrer filas de una tabla con For y obtener Pareto

Publicado por Abel (146 intervenciones) el 06/12/2017 05:01:21
He copiado tu ejemplo como tabla de ejemplo exactamente y me arrojaba los resultados del Pareto correcto (se cual es la ley de parreto o regla de 80/20). Tus campos de la tabla son iguales a los del ejemplo?... miro lo que me envías pero el resultado era correcto, en realidad era la respuesta completa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel

Recorrer filas de una tabla con For y obtener Pareto

Publicado por Abel (146 intervenciones) el 06/12/2017 21:49:21
Esta es tu solución a Pareto, en la respuesta anterior responde a letras (como mencionabas en tu enunciado que debían ser) y no a palabras como muestras el ejemplo que me envías. Nuevamente use tu propio ejemplo para resolver el problema y debería con esto resolverlo. Dime cualquier cosa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Use <TuTabla>
Scan
	nSuma=1
	For nX=1 To Afields(aCampos)
		If Upper(Left(aCampos(nX,1),3))="EST"
			cContenido = Alltrim(Upper(&aCampos(nX,1)))
			If Upper(aCampos(nX,1))=="EST1"
				Dimension aDistrib(1,2)
				aDistrib(1,1) = cContenido
				aDistrib(1,2) = 1
			Else
				Try
					nPosit = Asubscript(aDistrib,Ascan(aDistrib,cContenido),1)
					aDistrib(nPosit,2) = aDistrib(nPosit,2)+1
				Catch
					nSuma = nSuma+1
					Dimension aDistrib(nSuma,2)
					aDistrib(nSuma,1) = cContenido
					aDistrib(nSuma,2) = 1
				Endtry
			Endif
		Endif
	Next
	Asort(aDistrib,2,-1,1)
	Replace Pareto With aDistrib(1,1)
Endscan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de nancy

Recorrer filas de una tabla con For y obtener Pareto

Publicado por nancy (7 intervenciones) el 11/12/2017 18:53:35
Hola buen día, una disculpa por la demora y no haberte respondido con tiempo.

Te comento, ya le entendí a tu código (al fin :) ) y me ayudo mucho, te agradezco el tiempo que te tomaste por ayudarme.

Que tengas bonito día y saludos... :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel

Recorrer filas de una tabla con For y obtener Pareto

Publicado por Abel (146 intervenciones) el 12/12/2017 13:59:55
Excelente; me alegra haberte ayudado. Hermoso día para ti también.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad