こんにちは、
列をループして、各列の平均値、標準偏差、CV の新しい列を作成しています。 以下のスクリプトは、グローバル列統計では正常に機能しますが、平均列で行ったようにグループごとに追加しようとすると、数式が失敗します。
メインテーブルに更新された要約テーブルを使用して同じことを達成できることに気付きました。
ありがとう!
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp");
New Column("Old",
Character,
Formula(If(:age>=14,"Old","Young"))
);
colnames = dt << get column names( numeric,string );
For( i = 1, i <= N Items( colnames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( colnames[i] ) || " mean",
Numeric,
Formula(
Col Mean(Column(__colname__),:old)
)
);
New Column( Char( colnames[i] ) || " STD DEV",
Numeric,
Formula(
Col Std Dev(Column(__colname__))
)
);
New Column( Char( colnames[i] ) || " CV%",
Numeric,
Format( "Percent", 2 ),
Formula(
Col Std Dev(Column(__colname__))/
Col Mean(Column(__colname__))
)
);
),
Expr(__colname__),colnames[i]
)
)
);JMP では、Column() 関数のみを使用する場合に問題があるようです。ただし、As Column() 関数を使用すると問題が解決されます。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "Old", Character, Formula( If( :age >= 14, "Old", "Young" ) ) );
colnames = dt << get column names( numeric, string );
For( i = 1, i <= N Items( colnames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( colnames[i] ) || " mean",
Numeric,
Formula( Col Mean( as Column( __colname__ ), :old ) )
);
New Column( Char( colnames[i] ) || " STD DEV",
Numeric,
Formula( Col Std Dev( as Column( __colname__ ) ) )
);
New Column( Char( colnames[i] ) || " CV%",
Numeric,
Format( "Percent", 2 ),
Formula( Col Std Dev( as Column( __colname__ ) ) / Col Mean( as Column( __colname__ ) ) )
);
),
Expr( __colname__ ), colnames[i]
)
)
);
Substitute() 関数を使用しているため、As Column() 関数または Column() 関数を削除し、__colname__ を実際の列参照 :theactualcolumnname に置き換えることもできます。 以下を参照してください
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "Old", Character, Formula( If( :age >= 14, "Old", "Young" ) ) );
colnames = dt << get column names( numeric, string );
For( i = 1, i <= N Items( colnames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( colnames[i] ) || " mean",
Numeric,
Formula( Col Mean( __colname__ , :old ) )
);
New Column( Char( colnames[i] ) || " STD DEV",
Numeric,
Formula( Col Std Dev( __colname__ ) )
);
New Column( Char( colnames[i] ) || " CV%",
Numeric,
Format( "Percent", 2 ),
Formula( Col Std Dev( __colname__ ) / Col Mean( __colname__ ) )
);
),
Expr( __colname__ ), Parse( ":" || colnames[i] )
)
)
);