Bonjour ,
J'essaie de créer une variable (type2) à partir de plusieurs lignes par ID en utilisant le type de variable. Je veux convertir une table comme celle-ci :
identifiant | taper |
1 | UNE |
1 | UNE |
1 | B |
2 | UNE |
2 | UNE |
3 | B |
3 | B |
3 | B |
À:
identifiant | type 2 |
1 | C |
2 | UNE |
3 | B |
Où type2 est :
Si le type est toujours A alors type2=A ;
Si le type est toujours B alors type2=B ;
Si type est une combinaison de A et B alors type2=C ;
Merci
De nombreuses façons de le faire. Je calculerais combien de fois le type apparaît dans l'ID et si c'est le même montant que l'ID apparaît dans les données, alors vous savez que c'est le seul type.
Résumé avec formule :
Names Default To Here(1);
dt = New Table("From",
Add Rows(8),
New Column("ID", Numeric, "Nominal", Format("Best", 12), Set Values([1, 1, 1, 2, 2, 3, 3, 3])),
New Column("type", Character(16), "Nominal", Set Values({"A", "A", "B", "A", "A", "B", "B", "B"}))
);
dt_summary = dt << Summary(
Output table("To"),
Group(:ID),
N(:type),
Subgroup(:type),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << New Column("type2", Character, "Nominal",
<< Set Each Value(
If(:"type, A"n == 0, "B",
:"type, B"n == 0, "A",
"C"
)
)
);Et d'autres en utilisant Col Sum avec Sélectionner des lignes dupliquées :
Names Default To Here(1);
dt = New Table("From",
Add Rows(8),
New Column("ID", Numeric, "Nominal", Format("Best", 12), Set Values([1, 1, 1, 2, 2, 3, 3, 3])),
New Column("type", Character(16), "Nominal", Set Values({"A", "A", "B", "A", "A", "B", "B", "B"}))
);
dt << New Column("type2", Character, Nomimal, Formula(
If(Col Sum(1, :ID) == Col Sum(1, :ID, :type),
:type,
"C"
)
));
wait(1);
dt:type2 << Delete Formula;
wait(1);
dt << Select Duplicate Rows(Match(:ID, :type2));<BR />wait(1);<BR />dt << Delete Rows;Voir Scripting Index pour plus d'informations sur les fonctions, en particulier Col Sum.
Bonjour,
Il semble que votre table puisse être triée par :ID et :type. Si c'est le cas, ou si vous êtes prêt à le trier, vous pouvez en profiter et utiliser une formule (relativement) simple pour la colonne :type2 :
If( :type[Col Min( Row(), :ID )] == :type[Col Max( Row(), :ID )],
:type,
"C"
)
À votre santé,
Brady