এসএএস প্রোগ্রামিং ভাষা 1966 করার জন্য একটি ক্লাঙ্কি, সেকেলে ভাষা ডেটিং ফিরে ব্যবহারে আজ এখনও করে। মূল সংকলকটি পিএল / আইতে লেখা হয়েছিল এবং প্রকৃতপক্ষে সিনট্যাক্সের বেশিরভাগ অংশ পিএল / আই থেকে প্রাপ্ত। এসএএস-তে একটি প্রিপ্রসেসর ম্যাক্রো ভাষাও রয়েছে যা পিএল / আই থেকেও এসেছে । এই চ্যালেঞ্জটিতে আপনি এসএএস ম্যাক্রো ভাষার কয়েকটি সাধারণ উপাদানকে ব্যাখ্যা করবেন।
এসএএস ম্যাক্রো ভাষায়, ম্যাক্রো ভেরিয়েবলগুলি %letকীওয়ার্ড ব্যবহার করে সংজ্ঞায়িত করা হয় এবং লগের সাথে মুদ্রণ করা হয় %put। বিবৃতি সেমিকোলন দিয়ে শেষ হয়। এখানে কিছু উদাহরন:
%let x = 5;
%let cool_beans =Cool beans;
%let what123=46.lel"{)-++;
ম্যাক্রো ভেরিয়েবলের নামগুলি সংবেদনশীল এবং নিয়মিত প্রকাশের সাথে সর্বদা মেলে /[a-z_][a-z0-9_]*/i। এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা নিম্নলিখিতগুলি বলব:
- ম্যাক্রো ভেরিয়েবল শুধুমাত্র মুদ্রণযোগ্য ASCII অক্ষর সম্পূর্ণভাবে গঠিত মান ধরে রাখতে পারেন ব্যতীত
;,&আর% - মানগুলিতে কোনও শীর্ষস্থানীয় বা পিছনে স্থান নেই
- মানগুলি 255 টির বেশি অক্ষরের বেশি হবে না
- মানগুলি খালি থাকতে পারে
- মানগুলিতে বন্ধনী এবং উদ্ধৃতিগুলি তুলনামূলকভাবে মেলে না
- আগে ও পরে স্থান যে কোন পরিমাণ থাকতে পারে
=এ%letবিবৃতি এবং এই স্থান উপেক্ষা করা উচিত নয় - টার্মিনাল সামনে স্থান কোন পরিমাণ থাকতে পারে
;এ%letবিবৃতি এবং এই স্থান একভাবে উপেক্ষা করা উচিত নয়
যখন কোনও ম্যাক্রো ভেরিয়েবল বলা হয়, আমরা বলি যে এটির মানটির "সমাধান হয়"। ম্যাক্রো ভেরিয়েবলগুলি প্রিপেন্ডিংয়ের মাধ্যমে সমাধান করা হয় &। এখানে একটি al চ্ছিক পিছনে রয়েছে .যা সনাক্তকারীটির শেষ বোঝায়। উদাহরণ স্বরূপ,
%put The value of x is &X..;
লিখেছেন The value of x is 5.লগইন করুন। নোট করুন যে দুটি পিরিয়ড প্রয়োজনীয় কারণ একটি একক পিরিয়ড গ্রাস হয়ে যাবে &X.এবং এর সমাধান করবে 5। এছাড়াও মনে রাখবেন যে আমরা xছোট হাতের অক্ষরে সংজ্ঞায়িত হলেও , ম্যাক্রো ভেরিয়েবলের নামগুলি সংবেদনশীল না হওয়ার কারণ &Xহিসাবে একই &x।
এখানে এটি কৃপণ হয়ে যায়। &ভেরিয়েবলগুলি সমাধান করতে একাধিক গুলি একসাথে স্ট্রং করা যেতে পারে এবং &একই সময়ে নীড়ের সমাধানের একই স্তরে s উদাহরণ স্বরূপ,
%let i = 1;
%let coolbeans1 = broseph;
%let broseph = 5;
%put &&coolbeans&i; /* Prints broseph */
%put &&&coolbeans&i; /* Prints 5 */
&প্রথম অন্তর্নিহিত সংকল্পটি এবং সমাধানটি বাহ্যিকভাবে অব্যাহত থাকে। পরিবর্তনশীল নামের মিলটি লোভজনকভাবে সম্পন্ন হয়। দ্বিতীয় %putবিবৃতিতে, প্রসেসর নিম্নলিখিত পদক্ষেপগুলি তৈরি করে:
&iসমাধান করে1, এবং অন্তর্নিহিত নেতৃস্থানীয়&গ্রাস হয়ে যায়, আমাদের সরবরাহ করে&&coolbeans1&coolbeans1সমাধান করেbroseph, আমাদের দিচ্ছে&broseph&brosephসমাধান করে5।
যদি সেখানে চলমান .গুলি .থাকে তবে একাধিক &গুলি থাকলেও কেবলমাত্র একটি একক রেজোলিউশনে গ্রাস করা হয় ।
কার্য
%letনিউলাইনগুলি এবং একটি একক %putবিবৃতি দ্বারা পৃথক করা 1 এবং 10 এর মধ্যে বিবৃতি দেওয়া, বিবৃতিটির মুদ্রণ করুন বা প্রত্যাবর্তন করুন %put। ইনপুট যে কোনও মানকভাবে গ্রহণ করা যেতে পারে।
আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা বৈধ থাকবে এবং %letবিবৃতিগুলি %putবিবৃতিতে এগিয়ে যাবে। পরিবর্তনশীল যেগুলি সংজ্ঞায়িত হয় পরবর্তী %letবিবৃতিগুলিতে পুনরায় সংজ্ঞায়িত করা হবে না ।
যদি সত্যই এসএএসে চালানো হয় তবে ভেরিয়েবলগুলির সাথে সমাধানের কোন সমস্যা থাকবে না যা ভেরিয়েবলের অস্তিত্ব নেই এবং সমস্ত কিছু সিন্থেটিকভাবে সঠিক হবে উপরোক্ত বর্ণিত হিসাবে।
উদাহরণ
ইনপুট:
%let dude=stuff; %let stuff=bEaNs; %put &&dude..;আউটপুট:
bEaNs.ইনপুট:
%let __6 = 6__; %put __6&__6;আউটপুট:
__66__ইনপুট:
%let i=1; %let hOt1Dog = BUNS; %put &&HoT&i.Dog are FUNS&i!");আউটপুট:
BUNS are FUNS1!")ইনপুট:
%let x = {*':TT7d; %put SAS is weird.;আউটপুট:
SAS is weird.ইনপুট:
%let var1 = Hm?; %let var11 = var1; %let UNUSED = ; %put &&var11.....;আউটপুট:
Hm?....মনে রাখবেন যে,
&&var11ম্যাচvar11যেহেতু নামের ম্যাচিং লোভী হয়। যদি একটি থাকে., অর্থাত্&&var1.1, তাহলেvar1মিলবে এবং অতিরিক্ত 1 কোনও নামের অংশ হবে না।
এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত সমাধানটি জিতে!
&&&&&&&&&a......................কি কেবল একটি সময়সীমা অপসারণ করা হবে?
&stuff.সময়ের সরাবেন?