SAS Proc SQL为变量添加常量

时间:2013-01-23 20:57:01

标签: sas greenplum

我有一个带有数值变量tofromweight的SAS数据集。某些观察值weight的值为0。我需要将所有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设备。这可能是问题......

2 个答案:

答案 0 :(得分: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;

连接字符串与定义“mylib”libref的LIBNAME上使用的连接字符串相同。

但是,如果您真的想要创建SAS数据集(不更新真实表),可以通过简单的数据步骤来实现:

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

这将创建表格的副本,可以与其他SAS程序一起使用。

答案 1 :(得分:0)

在prosgress.com上查看this note。您可能需要将UPDATE_MULT_ROWS=YES添加到库定义中。