Le 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 vouloir changer 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 peut être testée. 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 la taille dans la table de données Big Class du dossier d'exemples de données 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 de référence de colonne pour la taille .
// 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'avons-nous obtenu?

Même résultat à chaque fois. Donc ma théorie est 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. Imaginons 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, :la taille 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?

Attends une minute! Je n'ai pas eu une seule erreur mais je n'ai pas obtenu le même résultat à chaque fois. Les deux premiers résultats sont corrects mais les deux derniers sont faux. (Notez qu'il y a 40 lignes dans la taille et la dernière hauteur = 70. 40 * 70 = 2800 au fait.) Faisons 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 la dernière façon?
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 pour me confier aux développeurs JMP.) Ma théorie est maintenant que
- :la taille , 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.
- :la taille , : Nom ("hauteur") , et Comme colonne ("hauteur") sont ne pas fonctions qui renvoient une référence de colonne.
- Comme Colonne() est un alias pour le deux-points (" : ") opérateur de cadrage, comme indiqué dans :la taille , qui renvoient tous les deux la valeur de la ligne actuelle s'ils sont utilisés dans une affectation.
Alors quelle est ma recommandation?
- Utilisation :la taille , Colonne ("hauteur") , Colonne (4) , : Nom ("hauteur") , ou Comme colonne ("hauteur") comme référence de colonne.
- Utilisation Colonne ("hauteur") ou Colonne (4) fonctions pour obtenir une référence de colonne.
- Ne pas utiliser :la taille , : 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 comment les références de colonnes peuvent être utilisées dans les scripts JMP. J'espère que vous suivrez les recommandations et éviterez davantage de confusion et de frustration.
@markbailey
lors de l'exécution de votre code
names default to here(1);
// 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 n'obtiens pas vos résultats ... en exécutant JMP 15.1. Ce que je reçois est:
sum = 2502;
sum = 2502;
sum = .;
sum = .;
Qu'est-ce que je rate?
Je ne pense pas qu'il vous manque quelque chose!
J'utilise également JMP Pro 15.1. Je l'ai redémarré avant de tester le code. En dehors de cela, je ne suis pas sûr de ce qui pourrait être différent entre les expériences.
Merci pour la suite de votre test de ma théorie et votre contribution!