![](/img/trans.png)
[英]Compare SAS Data Step and PROC SQL using Concatenate function
[英]Using SAS' proc sql or data step to replace the value of a single cell in a table?
可能我只是使用了錯誤的搜索詞:我have
一個包含多列(例如x
、 y
、 z
)和多行的大表,我打算用我保存在宏變量中的值替換其中的單個值稱為new_value
。
讀取相應單元格的當前值old_value
很簡單:
%let new_value = 4711;
proc sql noprint;
select z into: old_value
from have
where x = 42 and y = 21;
quit;
%put --- f(42,21) = &old_value. ---;
對於x=42
和y=21
的情況,如何使用&new_value
更新列z
?
如果數據步驟相當快,我也會對它感到滿意。 我只想修改表,而不是創建新表,因為表真的很大。
讓我們臨時復制 SASHELP.CLASS 數據以進行練習。
data class;
set sashelp.class;
run;
Select 一串值
%let new_value=90;
proc sql noprint;
select weight into :old_value from class where name='Thomas' and Age=11;
quit;
%put --- f(Tomas,11) = &old_value. ---;
SQL 中的更新非常簡單,您有條件:
proc sql;
update class set weight=&new_value where name='Thomas' and Age=11;
quit;
PROC SQL 可用於通過 VIEW 更新多個表,但這是另一個問題。
在數據步驟中,您可以使用事務(但需要數據排序,這不是免費的)。 讓我們使用 CLASS 數據集的初始副本:
proc sort data=class;
by name sex age;
run;
准備示例交易數據(可能多於一條記錄):
data transaction;
set class;
where name='Thomas';
weight=&new_value;
run;
proc sort data=transaction;
by name sex age;
run;
並進行更新:
data class;
update class transaction;
by name sex age;
run;
這里的鍵名、性別和年齡只是舉例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.