0

配列 (SAS データセットの列) 内のすべての数値を特定の累乗にする必要があります。これは、列の内容をマトリックスに書き込んだ後、IML で実行できると言われました。ただし、行列は IML で累乗するには明らかに正方形でなければならず、私のデータは正方行列ではありません。数値の 1 つの列を累乗する手順と構文は何ですか?

このような単純なことについて質問して申し訳ありません。私は SAS を初めて使用します。

4

3 に答える 3

3

謝る必要はありません。SAS は非常に異なる思考プロセスであり、多くの練習が必要です。あなたはすべて正しい質問をしています。

SAS は反復型言語です。あなたが話している数値の配列は、データセット内の多くの個々の観測のように聞こえます。SAS は、各データセット内で一度に 1 行ずつ値に対して操作を実行し、データ ステップの最後に達すると次の行に移動します。

データセットが次のようになっていると仮定します。

 var
 1
 2
 3
 4

各数値を 2 乗したい場合は、新しい変数を作成し (または、選択した現在の変数を上書きすることもできます)、**指数演算子を使用します。

data want;
    set have;
    var_squared = var**2;
run;

このステップでは、SAS はデータセットを作成し、データセットwantを読み取り、have長さ 8 の新しい数値変数を作成し、var_squaredそれに値 を割り当てvar*var、出力します。ファイル マーカーの終わりに到達するまで、各行の読み取り、計算、書き込みのサイクルを繰り返します。output自動的に暗示されることに注意してください。指定しない場合output、ヒットすると、SAS は新しいデータセットに自動的に書き込みますrun

新しいデータセットは次のようになります。

var var_squared
1   1
2   4
3   9
4   16
于 2015-10-21T19:12:53.910 に答える
0

お気づきのように、SAS/IML 言語は、おなじみのスカラー演算よりも多くの種類の乗算と "べき乗" 演算を提供します。SAS/IML 言語で乗算するさまざまな方法について読むことができます。

SAS/IML 言語では、ほとんどの演算について、要素ごとの演算とベクトル演算または行列演算が区別されます。ユースケースでは、ベクトルまたは行列の各要素を累乗する要素ごとの累乗演算子 (##) を使用する必要があります。たとえば、データ セット内の各生徒の身長の 2 乗を計算するには、次を使用できます。

proc iml;
use sashelp.class;
read all var {"Height"};
close sashelp.class;

sqHt = Height##2;   /* raise each element to 2nd power */
print Height sqHt;
于 2015-10-22T12:57:23.763 に答える