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.

此外,mylib指的是 Greenplum 设备。这可能是问题...

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”libref 的连接字符串相同。

但是,如果您真的想创建一个 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 回答