Commencer la mise à jour des donnéesBonjour
J'ai une table et j'aimerais que le volume vide soit mis à jour à 0

J'ai écrit le script pour mettre à jour la colonne "19-04-2024"
le problème c'est que le nom de la colonne peut être modifié et je préfère utiliser la colonne (3) ou la colonne (4)
mais ça ne marche pas.
pouvez-vous s'il vous plaît corriger le script ?
dt << Commencer la mise à jour des données ;
dt << Recoder la colonne (
dt << Colonne (3),
{Valeur de la carte ( _rcOrig, {., 0}, sans correspondance ( _rcNow ) )},
Mettre à jour les propriétés ( 1 ),
Colonne cible (Colonne (3) ) );
dt << Fin de la mise à jour des données ;
Automatisation et scriptsles fenêtresRe : Commencer la mise à jour des donnéesAsColumn semble fonctionner ici
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
Il s'agit d'un cas simple dans lequel j'utiliserais très probablement l'abonnement à la table de données.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
missing_rows = Loc(dt[0, 4], .);
dt[missing_rows, 4] = 0;
Re : Commencer la mise à jour des donnéesc'est quelque chose qui ne va pas
J'ai essayé d'utiliser le script simple pour changer le volume vide à 0 dans la colonne "19-04-2024"
dt[1::10, 3] = .;
lignes_manquantes = Loc(dt[0, 3], .);
dt[missing_rows, 3] = 0;

mais je vois que le script change non seulement la valeur vide à 0, le script change également de 14,3 % et 21,3 % à 0

en fait, mon script fonctionne bien, mais je ne sais pas comment changer dt :"19-04-2024" en "colonne 3"
dt << Commencer la mise à jour des données ;
dt << Recoder la colonne (dt :"19-04-2024",
{Valeur de la carte ( _rcOrig, {., 0}, sans correspondance ( _rcNow ) )},
Mettre à jour les propriétés ( 1 ),
Colonne cible( :"19-04-2024" ) );
dt << Fin de la mise à jour des données ;
Re : Commencer la mise à jour des donnéesCette partie
dt[1::10, 4] = .;
était là pour simplement ajouter quelques valeurs manquantes à des fins de démonstration (dix premières lignes de la colonne 4) afin que vous puissiez les supprimer.
Re : Commencer la mise à jour des donnéesoui, la ligne de commande
dt[1::10, 3] = .;
définissez toutes les valeurs des lignes 1 à 10 de cette troisième colonne sur vides. Le reste du script a remplacé les valeurs vides par 0. Donc, comme @jthi l'a expliqué, supprimez simplement la ligne.
Re : Commencer la mise à jour des donnéesIl existe 2 ou 3 astuces pour résoudre de tels problèmes :
- Nom Expr (Comme colonne (...))
- Eval(Substitut(Expr(),... , ...)))
- s'il y en a un 3ème, il peut être trouvé ici : Gestion des expressions dans JMP : Tipps et Trapdoors
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( dt, 2 ) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);
Re : Commencer la mise à jour des donnéesBonjour
Si j'ai bien compris votre suggestion, c'est de changer : "19-04-2024" par votre script .
mais j'ai eu l'erreur. Pouvez -vous vérifier où je me suis trompé ?
dt << Commencer la mise à jour des données ;
dt << Recoder la colonne (dt
( mon col = Nom Expr( As Column( Column( dt, 3 ) ) );
Eval( Remplacer( Expr( dt << Recoder la colonne( _col_,
{Valeur de la carte ( _rcOrig, {14, 0}, sans correspondance ( _rcNow ) )},
Mettre à jour les propriétés ( 1 ),
Colonne cible ( _col_ ))),
Expr( _col_ ), Nom Expr( ma col ))) ),
{Valeur de la carte ( _rcOrig, {., 0}, sans correspondance ( _rcNow ) )},
Mettre à jour les propriétés ( 1 ),
Colonne cible( :"19-04-2024" ) );
dt << Fin de la mise à jour des données ;
Re : Commencer la mise à jour des donnéesL'idée est :
obtenez un module qui peut être utilisé de manière flexible, le manche est mon col :
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( XXX) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);où As Column(XXX) peut être remplacé par
- Comme colonne (colonne ("sexe"))
- Comme colonne (dt, "sexe")
- En tant que colonne ("sexe")
- Comme colonne (3)
- Comme colonne (dt, 3)
- dans ton cas:
En tant que colonne (dt, "19-04-2024")
ou simplement sous forme de colonne ("19-04-2024")
modifier:
comme Jarmo le montre dans un article précédent : https://community.jmp.com/t5/Discussions/Begin-Data-Update/mp/752334/highlight/true#M93383 , pour Recode Column , en fait
- on n'a même pas besoin du Eval(Substitute(...))
- ni le Nom Expr(As Column(xxx))
... Recoder la colonne (AsColumn(xxx)...) suffit.
Ouah!
Re : Commencer la mise à jour des donnéesVous ne devriez avoir besoin que de cette pièce
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
où vous définissez votre index de colonne dans AsColumn.
Si j'ai une table comme celle-ci

et je souhaite remplacer les valeurs manquantes des index de colonne 1 et 3, j'utiliserais
dt << Recode Column(
As Column(dt, 1),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 1))
);
et
dt << Recode Column(
As Column(dt, 3),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 3))
);
(le numéro à l'intérieur de la colonne As a changé)

Re : Commencer la mise à jour des données
dt = Open("$SAMPLE_DATA/Big Class.jmp"); <BR />dt << Recode Column(
/*Print(.);*/AsColumn(dt, Print(1);2),
Print(2);{Print(3);Map Value(_rcOrig, {12, Print(4);0}, Unmatched(_rcNow))},
/*Print(0);*/Update Properties(Print(5);1),
/*Print(0);*/Target Column(/*Print(.);*/AsColumn(dt, Print(6);4))
);donne
2
5
6
1
1
3
3
3
3
3
3
1
:height
- Print(0) : aucune commande attendue ici → message d'erreur → /* Je les mets en commentaires */
- Print 2 : le 2ème argument est évalué ; la liste reste telle quelle (la liste n'est pas évaluée)
- Print(5) & Print (6) → les arguments des arguments nommés sont évalués
- Print(1) : maintenant le premier argument est évalué - pourquoi deux fois ?
- Print(3) : 6 fois (!) (indépendant des valeurs à remplacer)
- Print(1) : encore ?
- [Print(.) : sont évalués, mais empêchent Jmp d'obtenir correctement les informations des colonnes → /* Je les mets en commentaires */]
- Print(4) : n'apparaît pas → non attendu ici → erreur → les valeurs sont remplacées par "." (au lieu de 0)
- :height : valeur de retour : colonne cible
Re : Commencer la mise à jour des données(A) Dans
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1,"age"]=4;
row()=1;
AsColumn(dt, tmp=As Column(2);print(tmp);tmp /*=4*/); // column #4 , row #1= 59<BR />Sum(As Column(2) ,7) // 4 + 7 = 11<BR />Le résultat de As Column(2) n’est pas la colonne n°2, c’est la valeur de la colonne n°2 (dans la ligne n°1).
(B) D'un autre côté, le premier argument de Recode Column() n'est évalué qu'à un niveau où As Column() renvoie la référence de la colonne
... et NON la valeur de la ligne actuelle (comme dans le premier exemple).
Idem pour l'argument de l'argument Target Column() .
@joseph_morgan parle dans Utiliser JSL pour développer des applications efficaces et robustes sur les expressions qui sont "évaluées deux fois"
= (UNE)
si ce "standard" est empêché (B), c'est comme par magie:)
Re : Commencer la mise à jour des donnéesDonc, concernant la coloration syntaxique avancée dans JSL Editor, la fonction évalue-t-elle son argument ? , peut-être avons-nous besoin d'une troisième couleur ?
Re: Début de la mise à jour des donnéesBonjour
J'ai essayé de changer dt :"19-04-2024" en dt [1::10, 4], mais cela ne change pas le volume vide à 0
Peux-tu vérifier où je me suis trompé ?
dt << Commencer la mise à jour des données ;
dt << Recoder la colonne ( dt [1::10, 4] ,
{Valeur de la carte( _rcOrig, {., 0}, Sans correspondance( _rcNow ) )},
Mettre à jour les propriétés (1),
Colonne cible( dt [1::10, 4] ) );
dt << Fin de la mise à jour des données ;