قطاع الفواصل العليا من سلسلة أحرف (ضغط?)
-
23-08-2019 - |
سؤال
لدي سلسلة التي تبدو مثل هذا:
"ABAR_VAL", "ACQ_EXPTAX_Y", "ACQ_EXP_TAX", "ADJ_MATHRES2"
و أود أن تبدو مثل هذا:
ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2
أولا-هاء.أي صيغ أو الفواصل واحد مساحة فصل.
ما هو أنظف / أقصر طريقة للقيام بذلك في ساس 9.1.3?
يفضل شيئا على غرار:
call symput ('MyMacroVariable',compress(????,????,????))
مجرد أن تكون واضحة ، نتيجة يحتاج إلى مساحة واحدة فصل تخلو من علامات الترقيم ، الواردة في ماكرو متغير.
المحلول
هنا تذهب..
data test;
var1='"ABAR_VAL", "ACQ_EXPTAX_Y", "ACQ_EXP_TAX", "ADJ_MATHRES2"';
run;
data test2;
set test;
call symput('macrovar',COMPBL( COMPRESS( var1,'",',) ) );
run;
%put ¯ovar;
نصائح أخرى
وهذا هو جزء من infile بيان أو أنت في الواقع الرغبة في إنشاء ماكرو المتغيرات التي تحتوي على هذه القيم ؟ إذا كان هذا هو جزء من infile البيان يجب أن لا تحتاج إلى القيام بأي شيء إذا كان لديك محدد تعيين بشكل صحيح.
infile foo DLM=',' ;
و نعم يمكنك بالفعل استخدام ضغط وظيفة لإزالة محددة من الأحرف من سلسلة أحرف ، سواء في البيانات خطوة أو كجزء من ماكرو الاتصال.
COMPRESS(source<,characters-to-remove>)
عينة البيانات:
data temp;
input a $;
datalines;
"boo"
"123"
"abc"
;
run;
حل المشكلة في الخطوة (بدلا من إنشاء ماكرو متغير):
data temp2; set temp;
a=compress(a,'"');
run;
حل المشكلة في حين توليد الكلي المتغير:
data _null_; set temp;
call symput('MyMacroVariable',compress(a,'"'));
run;
%put &MyMacroVariable.;
عليك أن حلقة من خلال الملاحظات من أجل أن نرى مضغوط قيم المتغير لكل سجل إذا كنت تستخدم هذا الأخير رمز.:)
ضغط متعددة الفراغات في واحدة ، استخدام compbl : http://www.technion.ac.il/docs/sas/lgref/z0214211.htm