[英]SAS - Add Computed Column/Variable in Proc Sql Create Table
在MS SQL Server中,可以在create table語句中定義計算列,例如
CREATE TABLE dbo.Products
(
ProductID int
, QtyAvailable smallint
, UnitPrice money
, InventoryValue AS QtyAvailable * UnitPrice
);
SAS proc sql中有可用的等效選項嗎?
以下引發語法錯誤:
proc sql;
CREATE TABLE work.Products
(
ProductID num
,QtyAvailable num
,UnitPrice num format euro8.2
, InventoryValue AS QtyAvailable * UnitPrice
);
quit;
無法在SAS的物理表上定義計算列。 相反,必須為數據創建一個物理基表,並為計算列創建一個視圖,例如,如下所示:
proc sql;
create table work.products_base
(
ProductID num
,QtyAvailable num
,UnitPrice num format euro8.2
);
CREATE view work.Products as
select
ProductID
,QtyAvailable
,UnitPrice
,QtyAvailable * UnitPrice as InventoryValue
from work.products_base;
insert into work.products
set productid=1, qtyavailable=2,unitprice=3;
嘗試為InventoryValue添加值會引發警告:
169 set productid=1, qtyavailable=2,unitprice=3, inventoryvalue=4;
WARNING: Cannot provide InventoryValue with a value because it references a derived
column that can't be inserted into.
另一種方法是使用約束,這意味着一個物理表,但它確實要求開發人員確保將正確的值實際加載到其中(因此,不會計算出該值並占用物理磁盤空間)。
proc sql; drop table work.products;
create table work.products_base
(
ProductID num
,QtyAvailable num
,UnitPrice num format euro8.2
,InventoryValue num
,constraint InventoryValue check(InventoryValue = QtyAvailable * UnitPrice)
);
insert into work.products_base set qtyavailable=2,unitprice=2,inventoryvalue=4;
insert into work.products_base set qtyavailable=2,unitprice=2,inventoryvalue=2;
第二條插入語句引發錯誤:
ERROR: Add/Update failed for data set WORK.PRODUCTS_BASE because data value(s) do not comply
with integrity constraint InventoryValue.
當然-如果您實際上是在SQL Server中創建表,則可以使用傳遞語法來創建計算列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.