2013-01-23 133 views
0

我有一個SAS數據集,其中包含數字變量tofromweight。對於weight,一些觀測值爲0。我需要所有的weight值都是正數,所以我想簡單地在所有的weight值中加1。SAS Proc SQL向變量添加常量

我該如何使用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的設備。這可能是問題...

+0

也許你應該讓我們知道它是如何工作的?該代碼原樣適用於我。 ('數據測試; 做x = 1至10; 重量= 2; 輸出; 端; 運行; PROC SQL; 更新測試 集重量=重量+ 1; 退出; '例如)。 – Joe

+0

對不起,我應該顯示錯誤信息。發佈編輯。 – synaptik

+0

這聽起來確實是一個DBMS特定的錯誤。 SAS願意做這個操作,但大概你的Greenplum沒有抱怨。 – Joe

回答

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」邏輯庫引用名的LIBNAME所用

但是,如果你真的想創建一個SAS數據集(不更新真正的表),你可以做一個簡單的數據步:

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

這將創建一個副本可以與其他SAS程序中使用的表的

01。
0

在prosgress.com查看this note。您可能需要將UPDATE_MULT_ROWS=YES添加到您的庫定義中。