enter image description here

क्या कोई तरीका है कि मैं प्रत्येक समूह द्वारा पंक्ति मान को उसकी पिछली पंक्ति में बदल सकता हूं? नीचे डेटा सेट से पहले और बाद में है। प्रत्येक प्रकार के लिए उत्पाद - सी को प्रत्येक ग्राहक के लिए टाइप - एल के रूप में बदलने की आवश्यकता होती है जब आईडी समान होती है तो इसकी उच्चतम राशि होती है।

पहले

ObsCust LINK_ID Type Product    Amount
1   1   12432   L    A         23
2   1   12432   C    B         0
3   2   23213   L    C         234
4   2   23145   L    D         25
5   2   23145   C    E         0
6   3   21311   L    F        34
7   3   21324   L    G        45
8   3   21324   L    H        35
9   3   21324   C    I        0

बाद में

Cust LINK_ID Type   Product           Amount
1   12432    L       A                 234
1   12432    C       A                    -  
2   23213    L       C               23,212
2   23145    L       D                 335
2   23145    C       D                    -  
3   21311    L       F                 323
3   21324    L       G                2,344
3   21324    L       H                   34
3   21324    C       G                    -  

शुक्रिया!

sas
0
MD714 7 अप्रैल 2020, 17:39
क्या आप पूछ रहे हैं कि निम्नलिखित कैसे करें? " प्रत्येक ग्राहक के भीतर, जब एक प्रकार L राशि अधिकतम होती है तो यह LinkId ID और उत्पाद P के अनुरूप होगी। उसके लिए ID सभी गैर- उत्पाद के लिए L प्रकार P "
 – 
Richard
7 अप्रैल 2020, 18:17
आपका फोटोग्राफ आपके प्रश्न में डाले गए टेक्स्ट की तरह नहीं दिखता है। जो सही है? ऐसा लगता है कि आप केवल PRODUCT मान बदलना चाहते हैं, AMOUNT मान नहीं। और आप केवल PRODUCT को बदलना चाहते हैं जब AMOUNT एक हाइफ़न है, जो शायद यह दर्शाता है कि राशि शून्य है?
 – 
Tom
7 अप्रैल 2020, 18:50
@ रिचर्ड: हाँ और टाइप एल और टाइप सी के लिए लिंक आईडी इस बदलाव के लिए समान होना चाहिए।
 – 
MD714
7 अप्रैल 2020, 23:23
@ टॉम: कृपया स्क्रीनशॉट पर विचार करें। उत्पाद को तभी बदलने की आवश्यकता है जब लिंक आईडी टाइप एल और टाइप सी के लिए समान हो, यदि हां, तो टाइप सी उत्पाद = उच्चतम राशि वाला टाइप एल उत्पाद।
 – 
MD714
7 अप्रैल 2020, 23:25
एक समूह क्या है? क्या यह CUST और LINK_ID है? कुछ और? क्या उनके चर हैं जिनका उपयोग आप डेटा को सॉर्ट करने के लिए यह सुनिश्चित करने के लिए कर सकते हैं कि आप जिस उत्पाद को याद रखना चाहते हैं उसका मूल्य उन स्थानों से पहले देखा जाता है जहां आप पुन: उपयोग करना चाहते हैं? क्या C और L TYPE के एकमात्र संभावित मान हैं? क्या हम प्रकार में TYPE का उपयोग कर सकते हैं?
 – 
Tom
7 अप्रैल 2020, 23:43

2 जवाब

तो आपके पास करने के लिए कुछ प्रसंस्करण कार्य हैं:

क्या आपने सभी किनारे के मामलों पर विचार किया है?

  • एक ग्राहक के लिए अधिकतम राशि वाली पंक्ति (पंक्तियाँ) खोजें।

    • क्या उनमें से एक टाइप L है?
    • नहीं, कुछ मत करो
    • हां, उत्पाद और LinkId को निम्नानुसार ट्रैक करें

      <उल>
    • क्या एक से अधिक 'अधिकतम' पंक्ति है?
    • नहीं, उत्पाद और LinkId को एक ही पंक्ति से ट्रैक करें
    • हां, क्या पंक्तियों में एक से अधिक उत्पाद हैं? <उल>
    • नहीं, उत्पाद का मूल्य ट्रैक करें
    • क्या एक से अधिक LinkId हैं? <उल>
    • नहीं, LinkId ट्रैक करें
    • हां, कौन सी LinkIds?
    • सभी अलग-अलग LinkIds ट्रैक करें
    • इनमें से किसी एक को ट्रैक करें: पहला, निम्नतम, उच्चतम, अंतिम LinkId
  • हाँ, अब क्या ?
  • त्रुटि लॉग करें?
  • उत्पाद मानों में से एक ट्रैक करें क्योंकि केवल एक का उपयोग किया जा सकता है, कौन सा? <उल>
  • पहली बार होने वाला ?
  • न्यूनतम मान ?
  • उच्चतम मूल्य?
  • आखिरी बार होने वाला ?
  • ट्रैक किए गए LinkIds के लिए (हो सकता है कि कोई भी न हो) ट्रैक किए गए उत्पाद को उन पंक्तियों पर लागू करें जो C प्रकार की हैं (या शायद L टाइप न करें)

  • 0
    Richard 7 अप्रैल 2020, 23:57

    अगर मैं सही ढंग से समझता हूं, तो आप चाहते हैं कि सी प्रकार के लिए उत्पाद मूल्य एल प्रकार में उच्चतम राशि से जुड़ा उत्पाद हो। यदि यह सही है तो निम्नलिखित का उपयोग करने का एक संभावित तरीका है। सबसे पहले ग्राहकों और आईडी के प्रत्येक समूह के भीतर एल-टाइप के लिए उच्चतम राशि वाले उत्पाद की गणना निम्नानुसार की जाती है: ध्यान दें कि मूल डेटासेट को "उदाहरण" नाम दिया गया है।

    proc sql;
    create table L_Type as
    select cust, LINK_ID, product, amount
    from example
    where type = 'L' and amount = max(amount)
    group by cust, LINK_ID 
    ;
    quit;
    

    फिर ऊपर परिकलित उत्पाद को मूल उदाहरण में c प्रकार के लिए कोडित किया जाता है।

    proc sql;
    select 
        e.cust
       , e.LINK_ID
       , e.type 
       , case when e.type = 'C' then b.product end as product
       , e.amount
    from example e left join L_Type b
    on e.cust = b.cust and e.LINK_ID = b.LINK_ID
    ;
    quit;
    
    1
    Hesam Eivazy 8 अप्रैल 2020, 03:22