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

Creating multiple variables using multiple variables in SAS

数据是这样的......

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来创建segment1segment2

我可以使用 if 语句,但是在数据步骤或过程中有没有其他方法可以做到这一点 sql。

假设您有一个从 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,因为格式名称不允许以数字结尾。如有必要,您可以以编程方式创建格式,请参阅 PROC FORMAT 上的 CNTLIN 选项。