J'ai un ensemble de données verticales avec un nombre impair de données d'années (poids corporel, par exemple) pour chaque cas. Certains ont des années 1,2,3,4,6 et certains ont 3,4,5. Je veux que chaque cas ait 6 lignes avec la colonne année contenant 1,2,3,4,5,6 même si certaines de ces années n'auront pas de poids corporel. Comment puis-je attribuer à chaque cas 6 lignes qui reconnaissent l'année manquante appropriée ?
En supposant que vous ayez beaucoup de données, un simple script peut être utilisé pour ajouter les années manquantes.Vous trouverez ci-dessous un exemple qui crée une table originale avec quelques années manquantes, puis à partir de ce moment, effectue quelques étapes qui se terminent par l'ajout des années manquantes dans
names default to here(1);
dt = New Table( "Base",
Add Rows( 10 ),
New Column( "Case",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 1, 1, 1, 1, 2, 2, 2, 2, 2] ),
Set Display Width( 43 )
),
New Column( "Year",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 5, 6, 1, 2, 4, 5, 6] )
),
New Column( "OtherStuff", formula(randomuniform()))
);
// Summarize original data table to get a data table of the cases
dtCase = dt << Summary(
Group( :Case ),
Freq( "None" ),
Weight( "None" ),
output table name( "Cases" )
);
dtCase << delete columns(:N Rows);
// Create a new table with just the years
dtYears = new table("years", new column("Year", values([1,2,3,4,5,6])));
// Perform a cartesian join to create a table with all combinations of cases and years
dtCY = Data Table( "Cases" ) << Join(
With( Data Table( "years" ) ),
Cartesian Join,
Output Table( "Case and Years" )
);
// Use a join on the original table to add in the misssing years
dt << Join(
With( dtCY ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Case = :Case, :Year = :Year ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve main table order( 1 ),
Output Table( "Final" )
);
Cela marche! J'ai dû attribuer à ma table d'origine pour obtenir les cas, mais la méthode globale fonctionne bien. Merci beaucoup!