1

ユーザー定義モジュール内から SAS システムの proc IML 内で、ベクトルの名前を引数として取得することにより、ベクトル内のデータにアクセスできるようにしたいと考えています。

たとえば、以下のコードでは、「test」というモジュールが 2 つの文字列「x_vec1」と「x_vec2」を作成しますが、これら 2 つのベクトルの内容は出力せず、むしろそれらの名前を出力します (submit ブロックは同じ結果を生成すると思います)。

この概念は、マクロ内で IML を呼び出すことにより、マクロを使用して非常に簡単に実現できますが、コードを「クリーン」に保つために、純粋に IML で実行したいと考えています。IML は統計作業に優れていますが、これ以上のものが必要です。実行時に関数内で解決できるマクロ変数と同様の概念を使用して、コードを短くする必要があります。

proc iml;

start test(ep);

  str = concat("x_",ep);
  print str;

finish;


x_vec1 = J(10,1,34);
x_vec2 = J(10,1,67);

run test("vec1");
run test("vec2");


quit;
4

2 に答える 2

1

上記の Joe の回答を使用して、この新しい例は「x_vec1」と「x_vec2」と呼ばれる 2 つのベクトルにアクセスし、各要素にユーザー定義の量を追加します。したがって、このアプローチを使用して、ベクトル/行列名を引数として受け取る再利用可能なコードを作成できると思います。

proc iml;

start test(ep,n);

str1 = cats('print(x_',ep,');');
print str1;

str2 = cats('y_',ep,'= x_',ep,'+',char(n),';');
print str2;

str3 = cats('print(y_',ep,');');
print str3;

call queue(str1,str2,str3);

finish;


x_vec1 = J(10,1,34);
x_vec2 = J(10,1,67);

run test("vec1",10);
run test("vec2",100);


quit;
于 2014-10-03T16:35:47.530 に答える