Ich habe für jeden Fall einen vertikalen Datensatz mit einer ungeraden Anzahl von Jahresdaten (z. B. Körpergewicht). Einige haben die Jahre 1,2,3,4,6 und einige haben 3,4,5. Ich möchte, dass jeder Fall 6 Zeilen hat, wobei die Jahresspalte 1,2,3,4,5,6 enthält, obwohl einige dieser Jahre kein Körpergewicht haben. Wie kann ich jeweils 6 Zeilen zuweisen, die das entsprechende fehlende Jahr erkennen?
Angenommen, Sie haben viele Daten, können Sie die fehlenden Jahre mit einem einfachen Skript hinzufügen.Unten ist ein Beispiel, das eine ursprüngliche Tabelle mit einigen fehlenden Jahren erstellt und dann von diesem Punkt an ein paar Schritte ausführt, die dazu führen, dass die fehlenden Jahre hinzugefügt werden
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" )
);
Das funktioniert! Ich musste meiner ursprünglichen Tabelle zuweisen, um die Fälle zu erhalten, aber die Gesamtmethode funktioniert gut. Vielen Dank!