Bonjour ,
J'essaie de créer une variable (type2) à partir de plusieurs lignes par ID en utilisant le type de variable. Je veux cacher une table comme celle-ci:
IDENTIFIANT | taper |
1 | UN |
1 | UN |
1 | B |
2 | UN |
2 | UN |
3 | B |
3 | B |
3 | B |
Pour:
Où type2 est :
Si type est toujours A, alors type2=A ;
Si type est toujours B alors type2=B;
Si type est une combinaison de A et B, alors type2=C ;
Merci
Bonjour,
Il semble que votre tableau soit trié 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"
)
Acclamations,
brady
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 Select duplicated rows :
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 Index des scripts pour plus d'informations sur les fonctions, en particulier Col Sum.