SASの物理テーブルに計算カラムを定義することは不可能です。
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.
:InventoryValueに値を追加しようとし
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;
は警告をスロー:次のように代わり、1は例えば、データの物理的なベーステーブル、および計算列のビューを作成する必要がありますもう1つのアプローチは、1つの物理テーブルを意味する制約を使用することですが、開発者は正しい値が実際にロードされるようにする必要があります(計算されず、物理ディスクスペースを占有します)。
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;
二insert文がエラーをスローします。もちろん
ERROR: Add/Update failed for data set WORK.PRODUCTS_BASE because data value(s) do not comply
with integrity constraint InventoryValue.
- あなたが実際にSQL Serverで、あなたのテーブルを作成している場合、あなたはあなたの計算列を作成するには、構文パススルーを使用することができます。..
私はすでに行っていますが、どちらも動作しません:(選択されたステートメントでは動作しますが空のテーブルは作成しません) – kristof
お詫び - 私は間違っています - 2分、見てみる –
ありがとう@allanメタデータに関するSASテーブルを作成する場合は、インベントリ値 – kristof