データテーブルの列の名前を変更するための連想配列こんにちはJMPコミュニティ、
多くの列を持つデータテーブル(dt1)があり、名前を変更したいと思います。 それらは奇妙な名前でコード化されています。 しかし、名前とコードの2つの列しかない別のデータテーブル(dt2)があります。 dt2の各行には、コードに関連付けられた意味のある名前があります。
私はforループでこれを行う方法を知っていますが、私は何か新しいことを学ぼうとしていて、連想配列を通してそれを行うことを望んでいます。 このスレッドにあるものに似たものここに。 私はこのようなことができると思いました:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
しかし、残念ながら、これは機能しません。 それは私がどのように振る舞っていません思想連想配列は動作しました。
繰り返しになりますが、私は何か新しいことを学び、新しいJSLコマンドでより良くなりたいと思っています。そのため、連想配列を使用したいと考えています。 それが不可能な場合は、ブルートフォースのFor-Loopの方法で行います。
これについての考えやフィードバックをありがとう!、
DS
データ表スクリプティングRe:データテーブルの列の名前を変更するための連想配列連想配列とforループの使用は相互に排他的ではありません。多くの人がforループを避けたいと思っていることは知っていますが、結局のところ、テーブルの列を反復処理したいので、forループは反復処理を行うように設計されています。
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>Re:データテーブルの列の名前を変更するための連想配列こんにちは@David_Burnham 、
ご意見をいただきありがとうございます。 私は明らかに連想配列をもっと読む必要があります。 For Loopsはそれほど気にしませんが、名前の変更をよりエレガントな方法でコーディングしたいと考えていました。 他のスレッドへのリンクは、別の列の数値エントリに基づいて列の値を並べ替える非常に洗練されたソリューションでした。 そのスクリプトで連想配列が機能する方法は、テーブルの列で機能すると私が思った方法でしたが、明らかにそうではありません。 過去にリスト{...}を使用してForループで列の名前変更を行ったことがありますが、ループなしで別の方法を試してみようとしていました。 しかし、私はあなたが提示した連想配列メソッドが好きで、リストを作成するのではなく、そのようにします。
最初のデータテーブルの列名のリストと2番目のデータテーブルの連想配列を使用すると、列の「再コード化」関数のように、連想配列のために名前を簡単に再割り当てできると思っていたと思います。名前。
とにかく、列の名前を変更するために連想配列を使用するという私の質問に対するあなたの回答と解決策に感謝します。 データに戻る時が来ました!
ありがとう!、
DS
Re:データテーブルの列の名前を変更するための連想配列明確にするために、実際の例があるように配列の内容をハードコーディングしました。それでも、別のテーブルからキーと値を入力することは理にかなっています。Evals、Exprなどの必要がなかったことにも注意してください。頑張ってください。
Re:データテーブルの列の名前を変更するための連想配列こんにちは@David_Burnham 、
はい、私はあなたの例に従い、ハードコーディングを理解しました。 Name列とCode列の別のテーブルを操作する場合、連想配列を簡単に作成できるため(注:正しい順序である必要があります)、列名を設定するときに、一致するキーに正しい値が適用されます。 私はそれを実行しました、そしてそれは完全に働きました。 繰り返しになりますが、助けてくれてありがとう!
DS