এসএএস প্রোগ্রামিং ভাষা 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.
সময়ের সরাবেন?