2013-06-09 10 views
6

का उपयोग कर डेटा चरण में एक पंक्ति संख्या प्राप्त करें क्या सास पर पंक्ति संख्या प्राप्त करने के लिए एक ओवर विभाजन करने का कोई तरीका है? मैं जाना होगा एसक्यूएल में की तरह:एसएएस

Select region,company, ROW_NUMBER() OVER(PARTITION BY region ORDER BY Name) 
    From companyData; 

मैं एक डेटा अधिमानतः सेट

उत्तर

6

आप क्या कर सकते हैं में ऐसा करना चाहते हैं एक डेटा कदम में आसानी से बयान से उपयोग कर रहा है, यह द्वारा कि और एक चल कर योग:

proc sort data=myData; by region name; run;

Data myData; 
Set myData; 
By company; 
if first. company then n=1; 
    else n+1; 
run; 

इसके अलावा सभी ओ बीएस आप सुविधाओं में बनाया का उपयोग कर सकते ennmuarete रहे हैं:

DATA COMPANYDATA; 
SET COMPANYDATA; 
ROW_NUM=_N_;  
RUN; 

जो जैसा कि बताया जा आप कितना ओ बीएस आप उसके समूहीकरण के अंतर्गत मिलेगा के आधार पर अपने ROW_NUM के लिए प्रारूप सेट कर सकते हैं।

+0

@ जो अच्छी पकड़! और दोनों पर पूरी तरह से सहमत हैं, मैंने इसे संपादित किया! धन्यवाद! – isJustMe

+0

हाँ, आप इस मामले में mgith एक ओवरहेड हैं – isJustMe

+0

इस उत्तर में सॉर्टिंग चरण गुम है जो बॉब नीचे उल्लेखित है। अतिरिक्त सॉर्टिंग चरण जोड़ने के बिना आपको ऊपर दिए गए SQL उदाहरण के समान परिणाम प्राप्त करने की गारंटी नहीं है। –

2

एसक्यूएल ROW_NUMBER विंडोइंग समारोह डुप्लिकेट बनाने के लिए, आप डेटा दोनोंPARTITION और ORDER BY खंड द्वारा निर्धारित सॉर्ट करना होगा। बाद के डेटा चरण में, SET क्रमबद्ध डेटा सेट विभाजन चर द्वारा केवल और FIRST. स्वचालित चर नियंत्रण का उपयोग नई पंक्ति संख्या चर निर्दिष्ट करें।

proc sort data=companyData; 
    by region name; 
run; 
data want; 
    set companyData; 
     by region; 
    if first.region then row_number = 1; 
        else row_number + 1; 
run; 

सूचना डेटा चरण में BY बयान ANSI SQL में PARTITION BY खंड लेकिन PROC SORT कदम से मेल खाती है भी ORDER BY खंड में स्तंभों के आधार पर क्रमबद्ध करता:

यहाँ द्वारा अपने निर्धारित उदाहरण के लिए एक समाधान है। यह भी ध्यान रखें कि यदि आप "माइग्रेटिंग" क्वेरी में ORDER BY SQL क्लॉज शामिल हैं, तो आपको इसे PROC SORT चरण के साथ पालन करना होगा।

संबंधित मुद्दे