数据就像这样......
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
在这里,我必须使用line1
,line2
和product_name
来创建segment1
& segment2
。
我可以使用if语句,但在数据步骤或proc sql中是否还有其他方法可以执行此操作。
答案 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
步骤中使用相同的格式,如果这样更方便的话。您需要仔细考虑要使用的分隔符,并且不能仅仅seg1
和seg2
调用格式,因为格式名称不允许以数字结尾。如有必要,您可以以编程方式创建格式,请参阅CNTLIN
上的PROC FORMAT
选项。