Sélectionnez un nombre dynamique de colonnes avec JSL, en sélectionnant les colonnes qui répondent à une conditionhttps://www.jmp.com/support/help/14-2/use-set-selected-to-select-columns.shtml
Quelle est la meilleure façon de réécrire quelque chose comme ça ?
L'intention est que DT soit une jointure de TRANSPOSE et CATEGORY_TABLE.
- CATEGORY_TABLE est une table à une colonne avec une colonne Catégorie
- TRANSPOSE est le résultat d'une transposition de données
Le problème est que TRANSPOSE n'a pas toujours le même nombre de colonnes. De manière confuse, la sortie de la fonction transpose nomme les colonnes supplémentaires Ligne 1, Ligne 2, etc.
- Les deux premières colonnes de TRANSPOSE sont toujours les mêmes.
- La ligne de colonne 1 existera toujours en tant que 3ème colonne.
- Colonne(s) La ligne 2 et au-delà peuvent exister en fonction de l'ensemble de données.
Puis-je écrire la fonction Select() de telle manière que Join() sélectionne au moins la colonne Ligne 1, puis s'il y en a plus dans la dernière colonne ?
// This section is only build to handle two columns named Row 1 and Row 2
DT = Data Table( TRANSPOSE ) << Join(
With( Data Table( CATEGORY_TABLE ) ),
Select( :Forecast Material ),
SelectWith( :Category ),
Select( :Row 1, :Row 2 ), // sometimes there is only one row, sometimes there are more than one rows ******How to handle this?********
By Matching Columns( :Label = :Category ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 )
);
Re : Sélectionnez un nombre dynamique de lignes avec JSL, en sélectionnant les lignes qui répondent à une conditionMerci BSwid. Faites-moi savoir comment cela fonctionne.
Re : Sélectionnez un nombre dynamique de lignes avec JSL, en sélectionnant les lignes qui répondent à une conditionMerci Don. J'essaie de mettre à jour le code de quelqu'un d'autre. Je pense que cela fait ce que nous voulons. Il faut prendre un peu de temps pour valider avant d'accepter comme solution. Je ne voulais pas que vous pensiez que je n'avais pas vu et apprécié votre réponse. Je travaillais avec cette suggestion hier. Merci!Re : Sélectionnez un nombre dynamique de lignes avec JSL, en sélectionnant les lignes qui répondent à une conditionSupprimez les arguments contenant "Select" :
DT = Data Table( TRANSPOSE ) << Join(
With( Data Table( CATEGORY_TABLE ) ),
By Matching Columns( :Label = :Category ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 )
);
Les résultats contiendront toutes les colonnes des deux tables.
Re : Sélectionnez un nombre dynamique de lignes avec JSL, en sélectionnant les lignes qui répondent à une conditionJ'ai essayé quelque chose comme ceci et j'ai obtenu l'erreur Colonne introuvable {1} lors de l'accès ou de l'évaluation de « Mauvais argument »
Ce que j'imagine est l'argument au sein de Select() dans Join() .
J'ai pensé que je pourrais peut-être attribuer un vecteur de colonnes à une variable et utiliser la variable comme argument dans Select().
// Get a list of the column names
colList = TRANSPOSE << Get Column Names();
// Starting with column 3, select
For(i=3,i<= N Cols( TRANSPOSE ), i++, COLUMN( TRANSPOSE , colList[i]) << Set Selected(1) ) ;
// Assign those selected columns to a variable
Select_cols = TRANSPOSE << Get Selected Columns();
//then feed that variable into the Select() withing Join()
<SPAN class="token comment">// REJOINDRE</SPAN>
DT <SPAN class="token operator">=</SPAN> <SPAN class="token function">Tableau de données</SPAN><SPAN class="token punctuation">(</SPAN> TRANSPOSE <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages">Rejoindre</SPAN><SPAN class="token punctuation">(</SPAN>
With<SPAN class="token punctuation">(</SPAN> <SPAN class="token function">Tableau de données</SPAN><SPAN class="token punctuation">(</SPAN> CATEGORY_TABLE <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Select<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Forecast Material <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
SelectWith<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Category <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Select<SPAN class="token punctuation">(</SPAN> Select_cols <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> /// was Select<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Row <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token punctuation">:</SPAN>Row <SPAN class="token number">2</SPAN> <SPAN class="token punctuation">)</SPAN>
By Matching Columns<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Label <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">:</SPAN>Category <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Drop multiples<SPAN class="token punctuation">(</SPAN> <SPAN class="token number">0</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token number">0</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Include Nonmatches<SPAN class="token punctuation">(</SPAN> <SPAN class="token number">0</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token number">0</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
Preserve main table order<SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token punctuation">)</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>