SAS macro if then condition compare variable with numeric value

前端 未结 1 1762
心在旅途
心在旅途 2021-01-27 04:59

I have a data set that include several paths and the last variable is the frequency of the people following the path.

data path;
input path1 path2 path3 path4 p         


        
1条回答
  •  失恋的感觉
    2021-01-27 05:32

    You're confusing macro code with data step code.

    You need to use if not %if, for one. Also, %eval won't do what you want either. Here's some code with some improvements.

    %macro count(name,f,l);
    data path;
        set me.path;
        retain &name;
        &name=0;
        %do i=1 %to 6;
            if path&i=&f and path&i=&l then &name=&name+frequency;
        %end;
    run;
    %mend;
    

    Macro %if is used for comparing the text itself - so it compares path1 to 2, not the value of the path1 variable. To get the value of a variable you have to use regular if. %eval also uses the text, not the variable values, so it will do nothing useful here.

    You actually don't need a macro loop for this. Normally we would use arrays. I do assume you want the other parts in macro though...

    %macro count(name,f,l);
    data path;
        set me.path;
        retain &name;
        array path[6];
        &name=0;
        do i=1 to 6;
            if path[i]=&f and path[i]=&l then &name=&name+frequency;
        end;
    run;
    %mend;
    

    Now, I think this is always 0 still: because it can't be equal to 2 and 5 at the same time. That logic you may need to address.

    0 讨论(0)
提交回复
热议问题