2011-03-21 2 views
12

क्या कोई कथन \ कार्य चर के नाम प्राप्त करने में सक्षम हैं? पसंदीदा रूप से उन्हें किसी अन्य डेटा सेट, एक टेक्स्ट फ़ील्ड या मैक्रो चर के कॉलम में डालकर।एसएएस डेटा सेट में परिवर्तनीय नाम कैसे पढ़ा जाए?

E.g.

- डेटा सेट 1

Name age sex 

    Jk 14 F 
    FH 34 M 
  • अपेक्षित डेटा सेट

    Var_name_of_dataset1

    Name 
    age 
    sex 
    

पीएस: मुझे एक कथन पता है: इसमें चयन करें, जो 0hएसएच को अनुकूलित करता है, यह अनुकूलित सेपरेटर्स वाले क्षेत्र में कॉलम के मान को पढ़ सकता है, और इसलिए कॉलम नामों को फ़ील्ड या कॉलम में पढ़ने के समान तरीके हैं।

धन्यवाद

उत्तर

25

PROC सामग्री तेज तरीका एक डाटासेट में उस जानकारी को प्राप्त करने के लिए किया जाएगा। स्तंभ नाम कॉलम नाम में पाया जा सकता है।

proc contents data=sashelp.class out=contents noprint; 
run; 
+0

बहुत बहुत धन्यवाद लॉरेन! यह बहुत उपयोगी है। चेयर – mj023119

19

आप डेटास्टेप और सरणी कार्यों का भी उपयोग कर सकते हैं, उदा।

 
data colnames ; 
    set sashelp.class (obs=1) ; 

    array n{*} _NUMERIC_ ; 
    array c{*} _CHARACTER_ ; 

    do i = 1 to dim(n) ; 
    vname = vname(n{i}) ; 
    output ; 
    end ; 
    do i = 1 to dim(c) ; 
    vname = vname(c{i}) ; 
    output ; 
    end ; 
run ; 
+4

+1: मुझे लगता है कि यह शायद सबसे उपयोगी और लचीली विधि है।आप डेटा चरण से जो चाहते हैं उसे आउटपुट कर सकते हैं - एक विशिष्ट प्रारूप का डेटा सेट, या किसी दिए गए शैली में मैक्रो चर सेट करने के लिए कॉल सिम्पूट। आप अन्य जानकारी प्राप्त करने के लिए VLABEL, VFORMAT आदि भी कर सकते हैं। –

+0

हाय क्रिस, मैं बाद में आपकी विधि का प्रयास करूंगा। आप सभी को धन्यवाद :) – mj023119

+0

मुझे प्रो सामग्री पता है, लेकिन यह अधिक लचीला है। आपका बहुत बहुत धन्यवाद! – Matt

7
%macro getvars(dsn); 
%global vlist; 
proc sql; 
select name into :vlist separated by ' ' 
    from dictionary.columns 
    where memname=upcase("&dsn"); 
quit; 
%mend; 

यह एक मैक्रो चर & vlist अपने डेटासेट में सभी चर के नाम शामिल होंगे कि कहा जाता है, एक जगह से अलग कर दिया पैदा करता है। यदि आप परिवर्तनीय नामों के बीच अल्पविराम चाहते हैं, तो आपको केवल 'अलग' मान को 'से', '' में बदलना है। जहां कथन में अपकेस फ़ंक्शन का उपयोग गलत मामले में डेटासेट नाम को पार करने वाले किसी व्यक्ति के साथ समस्या से बचाता है। ग्लोबल स्टेटमेंट की आवश्यकता है क्योंकि मैक्रो वैरिएबल बनाया गया है, यह आवश्यक नहीं है कि इसे वैश्विक

+0

कुछ समस्याएं - सबसे पहले, यहां शब्दकोश सारणी तालिका बहुत धीमी हो सकती है, क्योंकि यह सभी पुस्तकालयों से पूछताछ करता है। दूसरा, यह अपकेस फ़ंक्शन प्रत्येक रिकॉर्ड पर आग लगाएगा ..% अपकेस अधिक कुशल होगा। अंत में, मैक्रो का उपयोग क्यों करें? यह खुले कोड में ठीक काम करेगा। –

0

के रूप में परिभाषित किए बिना मैक्रो के बाहर उपलब्ध नहीं होगा। मुझे यकीन नहीं है कि कच्चेफोकस का दावा है कि सभी पुस्तकालयों को शब्दकोश तालिकाओं को पढ़ना सच है, उदाहरण में साशेल का इस्तेमाल किया गया था। इसके बजाय vcolumn तो यह सच होगा, कि दृष्टिकोण बहुत धीमा है और आवंटित सभी पुस्तकालयों का उपयोग करता है। (आप इसे एसएएस आरटीआरएसीई सिस्टम विकल्प के साथ साबित कर सकते हैं।)

मुझे राय है कि dictionary.columns के लिए एक एसक्यूएल क्वेरी यहां उल्लिखित विधियों में से सबसे तेज़ है। स्पष्ट रूप से मैक्रोटिज्ड कोड मैक्रो के बिना काम करेगा लेकिन मैक्रो का बिंदु यहां एक उपयोगिता के रूप में लगता है; कोड को अपनी पसंदीदा मैक्रो लाइब्रेरी में रखें और आपको इसके बारे में फिर से सोचने की आवश्यकता नहीं है।

2

एसएएस सहायता और दस्तावेज़ीकरण से थोड़ा बदल गया।

%macro names(dsid); 
    %let dsid=%sysfunc(open(&dsid, i)); 
    %let num=%sysfunc(attrn(&dsid,nvars)); 
    %let varlist=; 
    %do i=1 %to &num ; 
    %let varlist=&varlist %sysfunc(varname(&dsid, &i)); 
    %end; 
    %let rc = %sysfunc(close(&dsid)); /*edit by Moody_Mudskipper: omitting this line will lock the dataset */ 
    %put varlist=&varlist; 
%mend names; 

%names(sasuser.class) ; 

तो हम मामले और डेटा बंद क्रम बनाए रखने के लिए, भले ही वह संख्यात्मक चरित्र मिश्रित है।

+0

डेटासेट को बंद करना न भूलें: '% sysfunc (बंद (& dsid));' – zuluk

+0

@zuluk इस लाइन को कहां रखा जाए? मैं इसे काम नहीं कर सकता –

+0

मैक्रो के अंत में इन पंक्तियों को लिखें: '% आरसी =% sysfunc (बंद करें (और डीएसआईडी));' '% varlist = & varlist;' '% mend names;' मेरे पास 'sasuser.class' भी नहीं है। मेरे लिए 'sashelp.class' काम करता है। – zuluk