cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Register to attend Discovery Summit 2025 Online: Early Users Edition, Sept. 24-25.
  • New JMP features coming to desktops everywhere this September. Sign up to learn more at jmp.com/launch.
Choose Language Hide Translation Bar
hcarr01
Level VI

Database scripts

Bonjour à tous,

 

J'essaye d'automatiser certaines modifications dans une table de données pour pouvoir faire une analyse.

 

Je dispose des colonnes Ref, % et % UPDATED dans ma table de données, et à partir d'un script j'aimerais construire les colonnes A, B, ...., J :

 

hcarr01_0-1744788305325.png

Danns la colonne A :

- reprendre pour la ligne ref A (ligne 1) : la donnée de la colonne % UPDATED

- reprendre pour les autres lignes : la donnée de la colonne %

 

Dans ma base de données initiale, j'ai environ 100 lignes distinctes dans ma colonne Ref, c'est pour ça que j'utilise pas directement une formule "If" pour créer mes 100 nouvelles colonnes.

 

Vous trouverez en pièces-jointes les bases de données.

Merci pour votre aide.

1 ACCEPTED SOLUTION

Accepted Solutions
jthi
Super User

Re: Database scripts

You can for example split your table

jthi_0-1744790302948.png

, then fill in missing based on the % column and finally update the values to your original table. And there are many ways of doing this filling, one option is via JSL and data table subscripting

Names Default To Here(1);

dt = Datatable("BD");

dt_split = dt << Split(
	Split By(:Ref),
	Split(:"% UPDATED"n),
	Group(:Ref, :"%"n),
	Output Table("Split of BD by Ref"),
	Sort by Column Property,
	Invisible
);

cont_cols = dt_split << Get Column Names("String", "Continuous");
Remove From(cont_cols, 1); // drop %

perc_vals = dt_split[0, "%"];

For Each({cont_col}, cont_cols,
	perc_vals_current = perc_vals;
	non_missing = dt_split << Get Rows Where(!IsMissing(As Column(dt_split, cont_col)));
	perc_vals_current[non_missing] = dt_split[non_missing, cont_col];
	
	dt_split[0, cont_col] = perc_vals_current
);

dt << Update(
	With(dt_split),
	Match Columns(:Ref = :Ref),
	Replace Columns in Main Table(None)
);

Close(dt_split, no save);

jthi_1-1744790704267.png

 

-Jarmo

View solution in original post

1 REPLY 1
jthi
Super User

Re: Database scripts

You can for example split your table

jthi_0-1744790302948.png

, then fill in missing based on the % column and finally update the values to your original table. And there are many ways of doing this filling, one option is via JSL and data table subscripting

Names Default To Here(1);

dt = Datatable("BD");

dt_split = dt << Split(
	Split By(:Ref),
	Split(:"% UPDATED"n),
	Group(:Ref, :"%"n),
	Output Table("Split of BD by Ref"),
	Sort by Column Property,
	Invisible
);

cont_cols = dt_split << Get Column Names("String", "Continuous");
Remove From(cont_cols, 1); // drop %

perc_vals = dt_split[0, "%"];

For Each({cont_col}, cont_cols,
	perc_vals_current = perc_vals;
	non_missing = dt_split << Get Rows Where(!IsMissing(As Column(dt_split, cont_col)));
	perc_vals_current[non_missing] = dt_split[non_missing, cont_col];
	
	dt_split[0, cont_col] = perc_vals_current
);

dt << Update(
	With(dt_split),
	Match Columns(:Ref = :Ref),
	Replace Columns in Main Table(None)
);

Close(dt_split, no save);

jthi_1-1744790704267.png

 

-Jarmo

Recommended Articles