10-26-2016 09:09 AM
I am new to SAS programming. I am finding way to solve the following problem.
The existing program prints 2 to 15 levels output by default. If I would like to print only the levels between a particular value (say 8) and 15, how do I achieve it using do or do-while loop.
Current sample output:
x_2 = x_1+(((1)/15)*y;
x_15 = x_1+(((14)/15)*y);
10-26-2016 09:51 AM
try next code, assuming you have X_1 and Y variables in a dataset::
%LET start = 8;
%LET stop = 15;
set have; /* input of X_1 and Y variables */
length x_&start - x_&stop 8;
array x_n x_&start - x_&stop ;
do i=&start to &stop;
j = i - &start +1;
x_n(j) = x_1 + (i/15)*Y; /* no need of all other brackets */
proc print data=want;
var x_1 y x_&start - x_&stop;
10-26-2016 09:53 AM
Please examine the instructions for posting questions. Post example test data, in the form of a datastep. And what you want the output to look like. Also describe any formula to achieve the output. I am afraid the given text does not describe the problem in any detail neede to give you an answer.
10-26-2016 09:54 AM - edited 10-26-2016 09:58 AM
It kind of helps to have some example input values and the actual desired output. And since you already have a program the entire program or at least the data step the example code came from. Since you do not show a PUT statement then you should clarify what you mean by "print" as there does not appear to be any "print" type output.
How are you telling the program that you want 8 to 15? Hard code in the program, based on the value of other variables in the dataset or something you provide interactively?
Also on this forum please do not post duplicate posts. If the post belongs in another topic area then you may get a suggestion to post the (possibly improved) question in an appropriate area or sometimes the post will be merged.
Duplicate posts end up with confusion as you get questions about your requirement that are answered in one thread but not the other and you feel "but I already answered that". Also others searching the forum may not find the thread with the accepted solution in the future.
10-26-2016 10:36 AM
Thank you for your reply.
I wil try to be more concise and would avoid duplicate posts.
I already have x_1 and x_16. Currently, the program creates columns x_2 to x_15 in output data created after I run the program. Instead, I want to declare a variable say x_(number) where I can input a number of my choice say (10) to have columns only from that number(x_10) to x_16. y is X_16 - X_1.
so instead of x_1 I want to output to start from x_(number) so that x_(number) is my new x_1.
I create x_2 to x_15 currently by using
x_2 = x_1 + ((1)/15)*y);
x_3 = x_1 + ((2/15)*y);
x_15 = x_1 + ((14/15)*y);
I include them in output data using
DATA = name_of_data (KEEP = x_1 x_16 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 x_11 x_12 x_13 x_14 x_15)