En boucle, comment indiquer une autre colonne que [I]Salut.
Encore une fois je dois demander de l'aide. J'ai écrit un script qui calcule le pourcentage de changement entre les valeurs d'une colonne numérique et la suivante. Malheureusement, je reçois une erreur: "Column 1897_Canvi Formula Interrupted
Impossible de convertir l'argument en un nombre [ou une matrice] 1 fois Aux lignes: {1} Opération: Soustraire, numericColNames [X] - numericColNames [i]
Les erreurs d'évaluation de la formule ont été ignorées "
Ce sont les numericColNamesn:
{"_1842 _", "_ 1877_", "_1887_", "_1897_", "_1900_", "_1910_", "_1920_", "_1930_", "_1940 _", "_ 1950_", "_1960_", " _1970_ "," _1981_ "," _1991_ "," _2001_ "," _2011_ "," _2018_ "}
C'est le script en question:
Names Default To Here( 1 );
dt = Current Data Table();
numericColNames = dt << get column names( string, numeric );
For( i = 2, i <= N Items( numericColNames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( numericColNames[i] ) || "_Canvi",
Numeric,
Continuous,
Format( "Percent", 12, 1 ),
X = i - 1,
Formula( (numericColNames[X] - numericColNames[i]) / numericColNames[X] )
)
),
Expr( __col__ ), Parse( ":Name (\!" " || numericColNames[i] || "\!")" )
)
)
);Re: Dans une boucle, comment indiquer une autre colonne que [I]Vous ne configurez pas correctement la fonction Substitute ().
Substitut et substitut en
La fonction Substitute () renvoie une copie d'une chaîne avec une expression de remplacement. le
Substitute Into () modifie la chaîne d'origine avec une expression de remplacement.
Par exemple, considérons le script suivant:
str1 = str2 = "All things considered";
str3 = Substitute( str1, "All", "Some" );
// str3 holds the result of the Substitute, and str1 is not changed
str4 = Substitute Into( str2, "All", "Some" );
// Substitute Into returns nothing, so str4 is missing, and str2 is changed
// and now holds the result of Substitute Into
Show( str1, str2, str3, str4 );
Ce script renvoie la sortie suivante:
str1 = "Toutes choses considérées";
str2 = "Certaines choses considérées";
str3 = "Certaines choses considérées";
str4 =.
Je vous ai retravaillé script, à ce que je devine deviendra ce que vous voulez
Names Default To Here( 1 );
dt = Current Data Table();
numericColNames = dt << get column names( string, numeric );
For( i = 2, i <= N Items( numericColNames ), i++,
Eval(
Substitute(
Expr(
New Column( Char( numericColNames[i] ) || "_Canvi",
Numeric,
Continuous,
Format( "Percent", 12, 1 ),
X = i - 1,
Formula( (__colX__ - __coli__ / __colX__ )
)
),
Expr( __coli__ ), Parse( ":Name (\!" " || numericColNames[i] || "\!")" ),
Expr( __colX__ ), Parse( ":Name (\!" " || numericColNames[X] || "\!")" )
)
)
);
La documentation de la fonction Substitute () a été copiée à partir du Guide de script.
Aide ==> Livres ==> Guide de script
Re: Dans une boucle, comment indiquer une autre colonne que [I]Tout d'abord, merci pour votre aide. Quand j'exécute votre script, j'obtiens l'erreur:
Dans le script suivant, erreur marquée par / * ### * /
Substitute / * ### * / (Expr (...
Cette partie du script a été suggérée dans un post précédent car le nom des colonnes était composé de nombres entiers, comme 1980. Le substitut pourrait être éliminé si, au lieu de 1980, il était "_1980_".
Que font les opérateurs "\!" après ": Nom".
Merci encore pour vos enseignements.
Re: Dans une boucle, comment indiquer une autre colonne que [I]Le nom de colonne de 1980 provoque un problème qui est résolu en mettant un: Nom ("1980") autour de la spécification de colonne. Ce n'est pas pourquoi la fonction Substitute () est utilisée. La fonction Substitute () existe, car vous ne souhaitez pas que la formule enregistrée pour la colonne ait la valeur
(numericColNames[X] - numericColNames[i]) / numericColNames[X] )
mais plutôt pour avoir la valeur
( __1980__ - __1960__ / __1980__ )
Si la formule a la première syntaxe que j'ai spécifiée, cela signifie que la formule échouera dès que votre session JMP changera l'une des valeurs suivantes: i, X, numericColNames. En d’autres termes, si vous enregistrez votre table de données, mettez fin à votre session JMP, puis relancez JMP, aucune des variables i, X ou numericColNames ne sera dans votre nouvelle session JMP. Ainsi, lorsque vous ouvrez le tableau de données, des colonnes qui ont des formules qui référencent ces variables vont échouer.
Enfin, je ne sais pas quel est le problème que vous rencontrez actuellement. Si vous pouviez fournir un échantillon de vos données, j'aurais au moins une chance de comprendre le problème.
Re: Dans une boucle, comment indiquer une autre colonne que [I]Bonjour encore. Mon intention est de calculer la variation en pourcentage du nombre d’habitants lors des recensements successifs effectués dans les municipalités de la province de Teruel (Espagne) au fil du temps. Mon intention est de comparer un recensement avec le recensement suivant. Dans la première colonne du tableau de données que je joins (en partie), les noms des municipalités sont enregistrés, dans les six suivants, les habitants de chaque municipalité apparaissent dans les différents recensements. Pour calculer le taux de change, je calcule la différence entre un recensement et le suivant, le résultat est divisé par le premier recensement, puis j'exprime la valeur obtenue en pourcentage. c'est-à-dire (_1842_ - _1877_) / _1842_
