have space separated file like below. problem is when var 3 has 0 value file don't have extra space mentioned and next field continues.
var1/var2/var3/4/var5
1 "host1" 2 "file1" "file2" 123456
4 "host1" "host2" "host3" "host4" 3 "file1" "file2" "file3" 456789
2 "host1" "host2" 0 9922
want
var1 var2 var3 var4 var5
1 "host1" 2 "file1" "file2" 123456
4 "host1" "host2" "host3" "host4" 3 "file1" "file2" "file3" 456789
2 "host1" "host2" 0 _null_ 9922
Looks pretty simple to me.
data want ;
length var1 8 var2 $200 var3 8 var4 $200 var5 8;
length i 8 next $200;
input var1 @;
do i=1 to var1 ;
input next @;
var2 = catx(' ',var2,next);
end;
input var3 @;
do i=1 to var3 ;
input next @;
var4 = catx(' ',var4,next);
end;
input var5 ;
drop i next ;
cards;
1 "host1" 2 "file1" "file2" 123456
4 "host1" "host2" "host3" "host4" 3 "file1" "file2" "file3" 456789
2 "host1" "host2" 0 9922
;
Assuming that you already have a way to read in VAR1 through VAR5 for the non-zero rows, here is the change to make:
input var1 var2 var3 @ ;
if var3 = 0 then input var5;
else input var4 var5;
This is obviously missing a lot of the details of the INPUT statement. But it's the trialing @ that you will need to add, to be able to modify your existing program.
Looks pretty simple to me.
data want ;
length var1 8 var2 $200 var3 8 var4 $200 var5 8;
length i 8 next $200;
input var1 @;
do i=1 to var1 ;
input next @;
var2 = catx(' ',var2,next);
end;
input var3 @;
do i=1 to var3 ;
input next @;
var4 = catx(' ',var4,next);
end;
input var5 ;
drop i next ;
cards;
1 "host1" 2 "file1" "file2" 123456
4 "host1" "host2" "host3" "host4" 3 "file1" "file2" "file3" 456789
2 "host1" "host2" 0 9922
;
Thanks Tom. I ran your code and it looks great.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.