在SAS中使用多个变量创建多个变量

时间:2017-08-21 14:20:59

标签: sql if-statement sas proc-sql

数据就像这样......

Line1       Line2       Product_name   Segment 1  Segment 2 

EUCREAS     ORAAL       EUCREAS        DPP-4      DPP-4 -EUCREAS
GALVUS      ORAAL       GALVUS         DPP-4      DPP-4 -GALVUS
GLICLAZIDE  ORAAL       DIAMICRON      SU         SU -GLICLAZIDE
GLICLAZIDE  ORAAL       GLICLAZIDE     SU         SU -GLICLAZIDE
GLP-1       ORAAL       BYDUREON       GLP-1      GLP-1
GLP-1       ORAAL       BYETTA         GLP-1      GLP-1
GLP-1       ORAAL       LYXUMIA        GLP-1      GLP-1
GLP-1       ORAAL       VICTOZA        GLP-1      GLP-1
INSULINES   INSULINES   ACTRAPHANE     INSULINES  INSULINES
INSULINES   INSULINES   ACTRAPID       INSULINES  INSULINES

在这里,我必须使用line1line2product_name来创建segment1& segment2

我可以使用if语句,但在数据步骤或proc sql中是否还有其他方法可以执行此操作。

1 个答案:

答案 0 :(得分:2)

假设您有一个相对简单的从LINE1 / LINE2 / PRODUCT_NAME到您的细分的映射,一个很好的方法是创建一个格式:

proc format;
  value $seg1f
    'EUCREAS:ORAAL:EUCREAS' = 'DPP-4'
    'GALVUS:ORAAL:EUCREAS' = 'DPP-4'
    ....
  ;
  value $seg2f
    'EUCREAS:ORAAL:EUCREAS' = 'DPP-4 - EUCREAS'
    'GALVUS:ORAAL:EUCREAS' = 'DPP-4 - GALVUS'
    ....
  ;
run;

然后您可以指定:

data want;
  set have;
  seg1 = put(catx(':', line1, line2, product_name), $seg1f.);
  seg2 = put(catx(':', line1, line2, product_name), $seg2f.);
run;

或者您可以在PROC SQL步骤中使用相同的格式,如果这样更方便的话。您需要仔细考虑要使用的分隔符,并且不能仅仅seg1seg2调用格式,因为格式名称不允许以数字结尾。如有必要,您可以以编程方式创建格式,请参阅CNTLIN上的PROC FORMAT选项。