2016-08-22 13 views
5

डेटासेट में, 10 चर V1, V2, ..., V10 हैं।एसपीएसएस में कई चर के मानदंडों के आधार पर मामलों का चयन कैसे करें?

मैं उन मामलों का चयन कैसे कर सकता हूं जिनमें इनमें से किसी भी चर का मान अधिक या बराबर है, कहें, 10?

मैं इस कोशिश की, लेकिन यह काम नहीं किया:

temporary. 
select if any(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, ge 10). 
list id. 

यह और दूसरों के एक जोड़े या तो काम नहीं किया:

select if ((v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) ge 10). 

उत्तर

1

यह भी काम करेगा:

count cnt_ = v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 (10 thru highest). 
exe. 
select if cnt_>0. 
exe. 

cnt_ चर गिनती कैसे के लिए प्रयोग किया जाता है कई चर के 10 या उससे अधिक का मान होता है। फिर चयन कमांड आपको जो चाहिए उसे चुनता है।

इसके अलावा, सभी लंबित परिवर्तनों को लागू करने के लिए execute को न भूलें। अन्यथा कुछ भी नहीं होगा।

+0

क्या यह 'cnt_ = v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 (उच्चतम के माध्यम से 10) होगा। – NonSleeper

+0

अच्छा! मैं हमेशा 'COUNT' कमांड के बारे में भूल जाता हूं। याद रखें कि आप निरंतर क्रम में वेरिएबल को 'V1 से V10' के रूप में संदर्भित कर सकते हैं, पहले' EXE' भी आवश्यक नहीं है। यह एक अतिरिक्त डेटा पास पेश करता है जब यह दूसरे डेटा पास पर एक साथ किया जा सकता है। –

+0

@JigneshSutar आप दोनों खातों पर सही हैं: 'v1 से v10' काम करता है IF चर लगातार हैं; 'exe' के बारे में - मैंने कई उदाहरण देखे हैं जब लोग इसे पूरी तरह से भूल गए हैं (यहां तक ​​कि इस प्रश्न के कुछ उत्तरों में भी)। जब भी मैं परिवर्तनों के दूसरे सेट पर जाता हूं (उदाहरण के लिए - चयन करने के लिए गिनती से) मैं उन्हें जोड़ने की आदत बना देता हूं; लेकिन आप पहले व्यक्ति के बारे में बिल्कुल सही नहीं हैं। –

3

आप इसके लिए लूप करना होगा:

do repeat vr=v1 to v10. 
    if vr ge 10 KeepMe=1. 
end repeat. 
select if KeepMe=1. 
+0

आपके और @ जिग्नेश सुतार के समाधान के लिए धन्यवाद। हालांकि मुझे आश्चर्य है कि यह भी निम्नानुसार किया जा सकता है। उदाहरण के लिए, यदि मानदंड 10 के बराबर मानों के साथ केस का चयन करना है, तो यह हो सकता है: 'यदि कोई (10, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) रखें = 1। 'या यह है कि अगर इस मानदंड में एक मान के बजाय चयन मानदंड एक सीमा है तो इसे इस शैली में नहीं लिखा जा सकता है? – NonSleeper

+0

'किसी भी' का उपयोग केवल एक ही मान के साथ किया जा सकता है (उदा। - 10, ऊपर दिए गए आपके उदाहरण में); दूसरी तरफ, 'रेंज', कैंडी केवल एक चर का उपयोग करती है: 'श्रेणी चुनें (var1,10,999) ' –

+0

बेशक यदि आप बिल्कुल लूपिंग से बचना चाहते हैं तो आप' v1> = 10 या v2> = 10 0r चुन सकते हैं .... ', लेकिन horace_vr कहता है - कोई कमांड/फ़ंक्शन नहीं है जो इन सभी तुलनाओं को एक में गिरा देगा। –

4

आप यहां वेक्टर/लूप दृष्टिकोण का उपयोग कर सकते हैं और जैसे ही पहले चर को दिए गए मानदंडों को पूरा करते हुए लूप को बाहर निकलने के लिए निर्दिष्ट किया जा सकता है , अपने मामले चर में 10 के मूल्य से अधिक है, इसलिए करने के लिए अनावश्यक रूप से शेष चर से अधिक पाशन नहीं जारी रखने के लिए:

*****************************************. 
* set up dummy data. 
set seed = 10. 
input program. 
loop #i = 1 to 500. 
compute case = #i. 
end case. 
end loop. 
end file. 
end input program. 
dataset name sim. 
execute. 
vector v(10, F1.0). 
do repeat v = v1 to v10. 
compute v = TRUNC(RV.UNIFORM(1,12)). 
end repeat. 
execute. 
*****************************************. 

vector v=v1 to v10. 
loop i=1 to 10. 
    if (v(i) > 10) Keep=1. 
end loop if v(i) > 10. 
select if Keep. 
+0

'एंड लूप आईएफ' अतिरिक्त दक्षता के लिए वास्तव में अच्छा स्पर्श है ... –

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