It doesn't have to be word. Any text editor that supports formatting, for example, I often copy and paste it into an email message since I always have Outlook open, but rarely have Word open.
Also here is how you would get your code working: (Just an example in debugging)
First, i=3 isn't a Boolean, if you meant i==3, this would never evaluate to true since i=2. So I made the assumption you meant i<=3.
Next, you change my_list from a list to a number, so you need to reflect that in the for loop. my_list becomes my_list.
Lastly, you need to be aware of the order of operations. dt:column_name This will first query the dt namespace to find a variable column_name. It just so happens that there is indeed a column named name. So then the will find the row in the column name, thus dt:column_name[1] == "KATIE", dt:column_name[2] == "LOUISE", ect. However, your script will then die since "KATIE" is not a list or matrix, and there are no subscripts so kills it. To keep order of operations correct you could simply change the code to below. Alternatively you could use the column function to remove ambiguity. Column(dt, i), or Column(dt, column_name) (which happen to be the same in this case since your column_name list is every column in the data table.)
column_name = dt << get column names();
//my_list = {10, 20};
my_list = 555;
for(i=2, i<=3, i++,
r = dt << Get Rows Where( :name == "LOUISE" );
dt:(column_name[i])[r] = my_list;
);