在SAS

2017-08-21 53 views
0

的数据创建使用多个变量,多个变量是这样的.....在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创建segment1 & segment2

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

+0

发布您到目前为止所尝试的内容并解释您的逻辑。 Segment1/Segment2是如何计算的?我可以做一些猜测,但如果你解释你的问题,它会更容易,更快。 – Reeza

+0

通过使用if语句: - data dsn; –

+0

seg1和seg2取决于line1,line2和product_name的某种组合。所以我用如果声明这样,我得到了输出。数据dsn;设置dsn1;如果line1 ='EUCREAS'和line2 ='ORAAL'和product_name ='EUCREAS',那么做; SEG1 = 'DPP-4'; SEG2 = 'DPP-4-EUCREAS';运行;.我想知道任何更短的方式,我可以做这个bcoz它会太长,把所有的if语句; –

回答

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,因为格式名称不允许以数字结尾。您可以根据需要以编程方式创建格式,请参阅PROC FORMAT上的CNTLIN选项。

+0

谢谢。但输出是不正确的。在那里我做了.PROC FORMAT; VALUE $ SEG112F'EUCREAS,ORAAL,EUCREAS'='DPP-4'; RUN;它应该只显示seg1的一个值;但它显示不止一个看到输出; –

+0

我没有看到任何地方的任何输出,你可以显示它吗?将您的CATX函数的结果分配给一个临时变量,以便您可以看到传入格式的内容。 –

+0

这里是output--线路1 \t \t 2号线PRODUCT_NAME \t SEG1 EUCREAS \t \t ORAL EUCREAS \t DPP-4 GALVUS \t \t ORAL GALVUS \t GALVU 格列齐特\t \t ORAL达美康\t GLICL 格列齐特\t \t ORAL格列齐特\t GLICL GLP -1 \t \t ORAL对Bydureon \t GLP-1 GLP-1 \t 口服\t \t BYETTA GLP-1 GLP-1次口服\t \t LYXUMIA GLP-1 GLP-1次口服\t \t \t Victoza的GLP-1 胰岛素胰岛素\t \t \t Actraphane INSU –