0

数値変数tofrom、およびを含む SAS データセットがありますweight。オブザベーションの一部は、 の値が 0 ですweight。すべてのweight値が正である必要があるため、単純にすべてのweight値に 1 を追加します。

Proc SQL を使用してそれを行うにはどうすればよいですか?

次のことを試しましたが、うまくいきません。

proc sql;
    update mylib.mydata
        set weight=weight+1;
quit;

エラーは次のとおりです。

ERROR: A CURRENT-OF-CURSOR operation cannot be initiated because
the column "weight" cannot be used to uniquely identify a row
because of its data type.

また、mylibGreenplum アプライアンスを指します。これが問題かもしれません...

4

2 に答える 2

1

そのテーブルを更新するためのデータベース権限がある場合は、SAS/Access パススルー機能を使用することをお勧めします。これを機能させるには、正しい構文を知っている必要があります。動作しない例を次に示します。

proc sql;
  connect to greenplm as dbcon
    (server=greenplum04 db=sample port=5432 user=gpusr1 password=gppwd1);
  execute (
     /* Native code goes here */

     update sample.mydata
        set weight=weight+1   

   ) by dbcon;
quit;

LIBNAME接続文字列は、「mylib」ライブラリ参照名を定義した で使用されるものと同じになります。

ただし、実際に SAS データセットを作成しようとしている (実際のテーブルを更新するのではなく) 場合は、単純なデータ ステップでそれを行うことができます。

data mydata;
   set mylib.mydata
   weight = weight + 1;
run;

これにより、他の SAS プロシジャで使用できるテーブルのコピーが作成されます。

于 2013-01-23T22:11:35.710 に答える
0

progress.com でこのメモを確認してください。UPDATE_MULT_ROWS=YESおそらく、ライブラリ定義に追加する必要があります。

于 2013-03-04T19:27:13.197 に答える