Script JMP implique souvent l'utilisation d'objets de colonne de données. Nous pourrions vouloir calculer des statistiques pour une colonne de données numériques. Nous pouvons souhaiter modifier un attribut ou une propriété de colonne. Dans tous ces cas, nous avons besoin d'une référence à la colonne afin de pouvoir la fournir comme argument. Il existe plusieurs façons d'obtenir ou d'utiliser une référence. Malheureusement, ils peuvent sembler équivalents jusqu'à un certain point jusqu'à ce que nous soyons surpris. Une théorie scientifique est vérifiable. Une théorie tient jusqu'à ce qu'un test l'invalide. Testons quelques théories sur les références de colonne.
j'utilise le hauteur colonne de données dans la table de données Big Class du dossier de données d'exemple JMP, qui est C:\Program Files\SAS\JMPPRO\15\Samples\Data dans mon cas. Commençons.
Names Default To Here( 1 );
// open a data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Notre premier test utilisera plusieurs formes différentes d'une référence de colonne pour hauteur .
// use a reference to a data column
sum = Col Sum( :height );
Show( sum );
sum = Col Sum( Column( "height" ) );
Show( sum );
sum = Col Sum( Column( 4 ) );
Show( sum );
sum = Col Sum( :Name( "height" ) );
Show( sum );
sum = Col Sum( As Column( "height" ) );
Show( sum );
OK, qu'est-ce qu'on a eu ?

Même résultat à chaque fois. Ma théorie est donc que ces cinq références différentes sont équivalentes. Mon premier test confirme ma théorie. Mais ce n'est que le premier test. Concevons un autre test. Obtenons d'abord la référence de la colonne, stockons-la, puis utilisons la référence stockée pour calculer la même statistique.
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
Notez que je n'ai pas inclus la toute première forme de référence, :hauteur car la valeur renvoyée et stockée dans l'expression col = :hauteur est manquant (".")! Ce résultat n'aide pas ma théorie! Qu'avons-nous obtenu avec le reste du test ?

Attendez une minute! Je n'ai pas eu une seule erreur, mais je n'ai pas eu le même résultat à chaque fois. Les deux premiers résultats sont corrects, mais les deux derniers sont faux. Effectuons un autre test de ma théorie. Obtenons à nouveau une référence de colonne, stockons-la, puis utilisons-la pour envoyer un message.
// get a reference to a data column and then use it
col = Column( "height" );
type = col << Get Data Type;
Show( type );
col = Column( 4 );
type = col << Get Data Type;
Show( type );
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
Voici ce que j'obtiens avec les deux premières façons.

Les deux premières méthodes semblent fonctionner comme prévu. Essayons la troisième voie.
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
Cette façon n'a pas fonctionné.

Et le dernier chemin ?
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
J'obtiens la même erreur que la dernière fois.

Il est clairement temps de réviser ma théorie. (Et peut-être se confier aux développeurs JMP.) Ma théorie est maintenant que
- :hauteur , Colonne( "hauteur" ) , Colonne( 4 ) , :Nom( "hauteur" ) , et Comme colonne( "hauteur" ) tous fonctionnent ou agissent comme une référence de colonne valide.
- Colonne( "hauteur" ) et Colonne( 4 ) sont des fonctions qui renvoient une référence de colonne.
- :hauteur , :Nom( "hauteur" ) , et Comme colonne( "hauteur" ) sont pas fonctions qui renvoient une référence de colonne.
- Comme Colonne() est un alias pour les deux-points (" : ") opérateur de portée, comme on le voit dans :hauteur , qui renvoient tous deux la valeur de la ligne actuelle si elle est utilisée dans une affectation.
Alors, quelle est ma recommandation ?
- Utiliser :hauteur , Colonne( "hauteur" ) , Colonne( 4 ) , :Nom( "hauteur" ) , ou Comme colonne( "hauteur" ) comme référence de colonne.
- Utiliser Colonne( "hauteur" ) ou Colonne( 4 ) fonctions pour obtenir une référence de colonne.
- Ne pas utiliser :hauteur , :Nom( "hauteur" ) , ou Comme colonne( "hauteur" ) pour obtenir une référence de colonne.
J'espère que cette adaptation (abomination ?) de la méthode scientifique a aidé à clarifier la manière dont les références de colonne peuvent être utilisées dans les scripts JMP. J'espère que vous suivrez les recommandations et éviterez davantage de confusion et de frustration.
Je ne pense pas qu'il te manque quoi que ce soit !
J'ai pu tester à nouveau le code et j'ai découvert qu'il y avait une erreur d'exécution lors de ma première tentative. J'obtiens le même résultat que toi. J'ai édité mon article pour refléter le résultat correct. Je ne change pas l'histoire.
@Mark_Bailey
J'ai exécuté votre code et j'ai reçu des résultats différents.Quand je cours :
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
Je reçois:
sum = 2502;
sum = 2502;
sum = .;
sum = .;