配列 (SAS データセットの列) 内のすべての数値を特定の累乗にする必要があります。これは、列の内容をマトリックスに書き込んだ後、IML で実行できると言われました。ただし、行列は IML で累乗するには明らかに正方形でなければならず、私のデータは正方行列ではありません。数値の 1 つの列を累乗する手順と構文は何ですか?
このような単純なことについて質問して申し訳ありません。私は SAS を初めて使用します。
謝る必要はありません。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
お気づきのように、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;