SAS到R使用SQLDF转换



如果你们中有人帮助我使用SQLDF将下面的SAS代码转换为R,我将不胜感激。我正在努力改变数据类型,并在一个单一的步骤应用子字符串函数。

在第二步中,我不确定如何将field的值保存在另一个可以在后期使用的新字段中。

proc sql;
create table noodle as
select          MATRL_NBR,
put(PLANT, z4.) as PLANT_NBR,
PLANT_DESC,
MFG_DT,
input(substr(FISC_PD, 5, 4), best32.) as FISC_YR,
input(substr(FISC_PD, 1, 3), best32.) as FISC_PD,
input(substr(FISC_WK, 1, 3), best32.) as FISC_WK,
PLANNED_ZNL,
ACTUAL_ZNL,
CRIT_SKU,
IP_BRAND,
IP_BU,
CATG,
MATRL_TYPE
from comb
;
quit;

proc sql noprint;
select          max(FISC_YR), max(FISC_WK)
into       :CURRENT_FISC_YR, :CURRENT_FISC_WK
from       noodle;
quit;

我认为以下方法可以达到你的目的:

library(sdldf)
noodle <- sqldf("select MATRL_NBR
,rightstr('0000'||cast(PLANT as varchar(4)),4) as PLANT_NBR 
,PLANT_DESC
,MFG_DT
,cast(substr(FISC_PD,5,4) as int) as FISC_YR
,cast(substr(FISC_PD,1,3) as int) as FISC_PD
,cast(substr(FISC_WK,1,3) as int) as FISC_WK
,PLANNED_ZNL
,ACTUAL_ZNL
,CRIT_SKU
,IP_BRAND
,IP_BU
,CATG
,MATRL_TYPE

from comb")
CURRENT_FISC_YR <- max(noodle$FISC_YR)
CURRENT_FISC_WK <- max(noodle$FISC_WK)

您可能希望在cast()函数中使用as doubleas float而不是as int,这取决于您需要的数值数据类型为fis_yr, fis_pd和fis_wk。

最新更新