Voici une approche:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( g = By( :sex ) );
If( N Items( g ) < 2,
biv obj = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
biv rep = biv obj << Report;
reg est = biv rep["Parameter Estimates"][NumberColBox(1)] << Get As Matrix,
// need By variable
biv obj = dt << Bivariate( Y( :weight ), X( :height ), By( :sex ), Fit Line );
biv rep = biv obj << Report;
reg est = [];
For( by = 1, by <= N Items( g ), by++,
reg est ||= (biv rep[by])["Parameter Estimates"][NumberColBox(1)] << Get As Matrix;
);
);
Show( reg est );
Bonjour .... je me demandais si quelqu'un pouvait expliquer la différence suivante avec le nombre d'éléments d'un rapport. Le code suivant tente d'extraire l'interception et la pente d'un ajustement linéaire appliqué à une plateforme Fit Y by X. Le problème que je vois est si la colonne: groupe ne contient qu'un seul élément, puis les numplots = 2, et j'obtiens une erreur en essayant d'extraire l'interception et la pente de rp [1]. Je dois extraire de rp [2]. Si le nombre d'éléments de la colonne: group = 2 ou plus, alors numplots = le nombre d'éléments de la colonne de groupe et je peux extraire l'interception et la pente de rp [1]. En fin de compte, je veux pouvoir extraire toutes les intersections et les pentes pour x nombre de groupes où x peut être compris entre 1 et peu importe, mais cette "fonctionnalité" rend le codage un peu plus long car je dois traiter # groupes = 1 différent de # groupe> = 2.
Clear Globals();
dt = Current Data Table();
bivObj = dt << Bivariate(
Y(:this),
X(:that),
Fit Line,
By(:group),
);
rp = bivObj << Report;
numPlots = nItems(rp1);
intercept = rp[1][OutlineBox("Parameter Estimates")][Columnbox("Estimate")][1];
slope = rp[1][OutlineBox("Parameter Estimates")][Columnbox("Estimate")][1];
Merci
Lorsque vous utilisez un By () dans un appel de plate-forme s'il y a plusieurs groupes, le résultat sera une liste des plates-formes.
Considérer ce qui suit:
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt <<
New Column( "Constant",
character,
formula( "a" )
);
bivObj1 = dt <<
Bivariate(
Y( :height ),
X( :weight ),
Fit Line,
By( :sex ),
);
bivObj2 = dt <<
Bivariate(
Y( :height ),
X( :weight ),
Fit Line,
By( :constant ),
);
Show( bivobj1, bivobj2 );
Le journal montrera:
/*:
bivobj1 = {Bivariate[], Bivariate[]};
bivobj2 = Bivariate[];
Vous pouvez donc vérifier votre variable bivObj pour voir s’il s’agit d’une liste et agir en conséquence. Par exemple:
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Constant", character, formula( "a" ) );
bivObj1 = dt << Bivariate(
Y( :height ),
X( :weight ),
Fit Line,
By( :sex ),
);
bivObj2 = dt << Bivariate(
Y( :height ),
X( :weight ),
Fit Line,
By( :constant ),
);
Show( bivobj1, bivobj2 );
If( Is List( bivobj1 ),
//bivobj1 is a list of platform references
For( i = 1, i <= N Items( bivobj1 ), i++,
rp = bivObj1[i] << Report;
intercept = rp[Outline Box( "Parameter Estimates" )][Columnbox( "Estimate" )][1];
slope = rp[Outline Box( "Parameter Estimates" )][Columnbox( "Estimate" )][1];
Show( intercept, slope );
)
,
//bivobj1 is not a list, it's a single platform reference
rp = bivObj1 << Report;
intercept = rp[Outline Box( "Parameter Estimates" )][Columnbox( "Estimate" )][1];
slope = rp[Outline Box( "Parameter Estimates" )][Columnbox( "Estimate" )][1];
);