我有一个垂直数据集,每个案例的年数数据(例如体重)不均匀。 有些有 1、2、3、4、6 年,有些有 3、4、5 年。 我希望每个案例都有 6 行,其中年份列包含 1、2、3、4、5、6,即使其中一些年份没有体重。 如何为每个案例分配 6 行以识别适当的缺失年份?
假设您有大量数据,可以使用一个简单的脚本来添加缺失的年份。下面是一个示例,它创建了一个包含一些缺失年份的原始表,然后从这一点开始执行几个步骤,最终将缺失的年份添加到
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" )
);
这行得通! 我不得不分配到我的原始表来获取案例,但整体方法工作正常。 非常感谢!