我正在嘗試根據連接的資料集進行一些計算。我的目標是計算上一年的價格收入。下面的代碼適用于當前價格和銷售額的收入。
data work.price;
input date date. car $ price;
format date date9. ;
datalines;
01Jan19 Model1 7000
01Jan19 Model2 4000
01Jan19 Model3 5000
01Jan20 Model1 7500
01Jan20 Model2 4800
01Jan20 Model3 4500
01Jan21 Model1 8000
01Jan21 Model2 5200
01Jan21 Model3 4000
run;
data work.sales;
input date date. type $ sales;
format date date9. ;
datalines;
01Jan19 A 10
01Jan19 B 4
01Jan19 C 50
01Jan20 A 18
01Jan20 B 10
01Jan20 C 16
01Jan21 A 22
01Jan21 B 8
01Jan21 C 13
run;
data work.assignment;
input car $6. type $7.;
datalines;
Model1 A
Model2 B
Model3 C
run;
proc sql ;
create table want as
select Date format date9., *,price*sales as return
from sales
natural join price
natural join assignment
;
quit;
到目前為止,我的解決方案是在加入之前改變價格的時間序列。但是我想知道在proc sql陳述句中是否可以更有效地完成這一步。
data work.price;
set work.price;
Date = intnx('month',date, 12);
run;
非常感謝你的幫助!
uj5u.com熱心網友回復:
您可以通過使用內部聯接并指定聯接條件來做到這一點。對你來說,這就像
proc sql;
create table want as
select
p.date format date9., s.type, s.sales, p.car, p.price, p.price * s.sales as return
from
sales as s
inner join
prices as p
on
intnx("year", s.date, 1) = p.date
inner join
assignment as a
on
s.type = a.type and
p.car = a.car;
quit;
就我個人而言,我總是做顯式的內部連接,而不是依賴自然連接。如果您的輸入資料有問題,您會得到一個錯誤而不是錯誤的結果。此外,需要明確選擇所需的列,而不僅僅是選擇 *.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/427756.html
